「やってはいかんとわかっていても、それをやったときのエラーを確認しろ」というのが師匠流なのですが、 shared_ptr でそれをやろうとしてうまくいきません。
#include <iostream> #include <boost/smart_ptr/shared_ptr.hpp> class aClass { public: aClass() { std::cout <<"Created !" <<std::endl; }; ~aClass() { std::cout <<"Deleted !" <<std::endl; }; }; int main(int argc, char* argv[]) { aClass *rawPtr = new aClass(); boost::shared_ptr<aClass> ptr1(rawPtr); boost::shared_ptr<aClass> ptr2(rawPtr); return 0; }
書籍によるとこれは失敗例らしく、自分もそう思います。最後に同じ領域が2回 delete されそうな気がします。ただ、手持ちの環境では不正終了などもなく、デストラクタが2回実行されて終わりました。 Windows って不要なメモリを回収するのが早いような印象があったのですが、メモリの残滓だけでもデストラクタが動くのでしょうか。
関数とか、スコープを違えると不正終了するかも…
Contributions