電子書籍の厳選無料作品が豊富!

C++ Vectorのデストラクタ
boost::any型のVectorに自作クラスをpush_backで入れると、なぜかその自作クラスのデストラクタが呼ばれてしまって困っています。 またそのクラスの関数を実行すると同じようにデストラクタが呼ばれてしまいます。 

A 回答 (2件)

boost:anyのVectorについてではないですが、


STLのvectorでは、オブジェクトの再配置が起こります。
同様の理由じゃないでしょうか?

http://homepage2.nifty.com/well/STL.html

vector のメモリの再配置にかかわる問題です。vector は、可変長配列であるがゆえに、配列を伸ばす操作を行うと、あらかじめ用意してあったメモリ領域をはみ出してしまう場合があります。そのようなときには、十分な長さの新しいメモリ領域をとって、現在の内容をそこにコピーし、元のメモリ領域を開放するという動作を行います。この場合、元のメモリ領域を指していたポインタや参照は、使えなくなります。
    • good
    • 0
この回答へのお礼

自己解決しました。boost::anyのダウンキャストが理由でした。おっしゃって頂いたvectorの再配置にも引っかかっていました。ありがとうございました。

お礼日時:2010/09/09 11:58

「boost::any型のVector」というのがよくわからんのだけど.... C++ には「Vector」というものはなかったような気がするし.


可能なら, どんなコードを書いたのか見せてもらえませんか?
    • good
    • 0
この回答へのお礼

自己解決しました。boost::anyのダウンキャストが理由でした。
BoostはC++を作った委員会の人が作ったライブラリ(?)です。any型は全ての型やクラスを保存できるすごく便利なクラスです。
visual studioであればプロトタイプ版が入っています。ちなみにvectorはSTLの奴です。

お礼日時:2010/09/09 12:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!