newでインスタンス化するメソッドをポインタから呼び出すような以下のクラス:
c++
1#include <iostream> 2class Test{ 3 public: 4 bool allocated; 5 Test():allocated(true){ 6 std::cout << "constructer" << std::endl; 7 } 8 ~Test(){ 9 std::cout << "destructer" << std::endl; 10 if(allocated){ 11 delete this; 12 } 13 } 14 static Test* instantiate(){ 15 return (new Test); 16 } 17 void print(){ 18 std::cout << "hello world " << allocated << std::endl; 19 } 20};
を定義して、以下のmain関数を実行すると、
c++
1int main(void){ 2 Test* pt; 3 pt = pt->instantiate(); 4 pt->print(); 5 return 0; 6} 7
標準出力が
constructer
hello world 1
のみとなっていて、mainを抜けたところで「destructer」と表示されるのを期待していたのですが、そうなりませんでした。
ということは、このコードだとinstantiate()でnewされたメモリ領域がdeleteされていないことになるのでしょうか?
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/07 06:49
2018/03/07 07:02