凡人の日々の経過を記録
カレンダー
カテゴリー
リンク
最新記事
(03/21)
(03/11)
(03/05)
(03/02)
(02/06)
ブログ内検索
コガネモチ
最近は、会社でC++の勉強をしている。
一応、講習という形で行われているのだが、声も届かず、黒板も見えず、はっきり行って自分で勝手にやっていたほうがいいのではと思う。 ただ、演習問題が配られるので、それは結構勉強になるのでやっている。 C++は、大学のときにちょっとやっていて、オブジェクト指向とか、クラスとかの辺は、ほどほどのものなら作れた。 今回、コピーコンストラクタというものがでてきたのだが、これがくせものだった。 クラスのメンバ変数で、int型とかchar型とかの静的な場合は、ただ単にコピーするだけで良いのだが、ポインタといった動的な場合は、ひと工夫が必要らしい。 デフォルトのコピーコンストラクタの仕様は、ビットごとにオブジェクトをコピーする、というものなのだが、ここで、メンバにポインタが使われている場合、そこに格納されたアドレスがそのままコピーされてしまう。 よって、コピーコンストラクタによって生成したオブジェクトとその元の動的なメンバ変数は、同じ場所をさしてしまうため、メモリの開放をダブって行ってしまう危険性がある。 私は、このことをはじめ知らなかったので、デストラクタでdeleteとやっていたのだが、どうもエラーがおこってしまい、うまくいかず悩んでしまった。 大学でも、同じ経験があったので、これがわかったことは、かなりの収穫だった。 コピーコンストラクタと同じように、代入演算子も同じらしい。 C言語はなかなか奥が深いが、C++も奥が深そうだ。 馴れるまでが大変そうだ。 PR この記事にコメントする
|