
C++ Vectorのデストラクタ
C++ Vectorのデストラクタ
boost::any型のVectorに自作クラスをpush_backで入れると、なぜかその自作クラスのデストラクタが呼ばれてしまって困っています。 またそのクラスの関数を実行すると同じようにデストラクタが呼ばれてしまいます。
投稿日時 - 2010-09-08 13:43:39
boost:anyのVectorについてではないですが、
STLのvectorでは、オブジェクトの再配置が起こります。
同様の理由じゃないでしょうか?
http://homepage2.nifty.com/well/STL.html
vector のメモリの再配置にかかわる問題です。vector は、可変長配列であるがゆえに、配列を伸ばす操作を行うと、あらかじめ用意してあったメモリ領域をはみ出してしまう場合があります。そのようなときには、十分な長さの新しいメモリ領域をとって、現在の内容をそこにコピーし、元のメモリ領域を開放するという動作を行います。この場合、元のメモリ領域を指していたポインタや参照は、使えなくなります。
投稿日時 - 2010-09-08 14:18:25
自己解決しました。boost::anyのダウンキャストが理由でした。おっしゃって頂いたvectorの再配置にも引っかかっていました。ありがとうございました。
投稿日時 - 2010-09-09 11:58:51
このQ&Aは役に立ちましたか?
5人が「このQ&Aが役に立った」と投票しています
回答(2)
「boost::any型のVector」というのがよくわからんのだけど.... C++ には「Vector」というものはなかったような気がするし.
可能なら, どんなコードを書いたのか見せてもらえませんか?
投稿日時 - 2010-09-09 00:10:54
自己解決しました。boost::anyのダウンキャストが理由でした。
BoostはC++を作った委員会の人が作ったライブラリ(?)です。any型は全ての型やクラスを保存できるすごく便利なクラスです。
visual studioであればプロトタイプ版が入っています。ちなみにvectorはSTLの奴です。
投稿日時 - 2010-09-09 12:06:09