という呟きをTwitterで見たので試してみました。実に数年ぶりのC++です!まぁ、こんな小さなサンプル書くだけでもコンパイルエラー出したので、もうダメだなと思いましたorz
#include <iostream> class A { public: A() { std::cout << "A::A()" << std::endl; } virtual ~A() { std::cout << "~A::A()" << std::endl; } }; int main(int argc, char** argv) { { std::cout << "scope" << std::endl; A(); } { std::cout << "delete" << std::endl; A* ap = new A(); delete ap; } { std::cout << "void* delete" << std::endl; void* ap = new A(); delete ap; } }
スコープで死んでもらうのと、明示的にdeleteするのとvoid*に代入してdeleteする3ケース試してます。
scope A::A() ~A::A() delete A::A() ~A::A() void* delete A::A()
ほんとだ、最後に~A::A()が呼ばれてない。知らなかったな〜。