- ベストアンサー
多重delete
最近デバッグをしていて気づいたのですが、引数がクラスのときはコンストラクタが呼び出されないようなのですが、そうするとデストラクタだけ余分に呼び出されてしまいます。NULLを入れるというのも検討しましたが、もし忘れたときのことも考えると、ほかに良い方法がないものかと思いました。 コード例 class Test{ public: void Compare(class Data Data1,class Data Data2); }; class Data{ private: int *Data; public: Data(){Data=new int[10];} ~Data(){delete[] Data;} }; 上記のようなコードで、Compareを呼び出したときはDataのコンストラクタは呼ばれていませんが、Compareを抜けたときにはデストラクタが呼ばれているようです。 勉強も兼ねて、vectorの代わりになるものを作っていたのですが、どうやら同じポインタにdeleteが複数回呼ばれているようで、エラーが出てしまいます。 もし良い解決策が分かる方いましたら、回答よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (4)
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
回答No.5
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.4
- kmee
- ベストアンサー率55% (1857/3366)
回答No.3
- D-Matsu
- ベストアンサー率45% (1080/2394)
回答No.2
お礼
多くの方から回答いただきましたが、コピーコンストラクタで解決することにしました。 ありがとうございました。