2017-10-31 2 views
-5

新しいC++オブジェクト指向プログラムです。私はポインタとしてC++オブジェクトを明示的に削除しますか?

MyClass* myobject1 = new MyaClass(); 

を作ることができると私はメモリからゴミにオブジェクトをしたい時に削除対象のように、明示的に削除するために必要がある新しいオブジェクトを作成したいとき、私は、Cの++に見えます。

私の質問は、私は新しいオブジェクトポインタ(例えば、MyClass2 myobject2 = new MyCalss2())を作成しました。私はmyobject1を削除すると、私は明示的に削除する必要がありますか?myobject1 deconstructor myobject1、またはmyobject2自動ゴミ箱に削除しますか?

+3

C++にガベージコレクションはありません。 'new'で構築された全てのオブジェクトは、メモリが漏れないように' delete'で破壊する必要があります。 –

+1

'MyClass2 myobject2'はポインタではありません。ポインタを割り当てることはできません。ポインタを '削除 'する必要はありません。 – user4581301

+3

実際のコードを投稿してください –

答えて

0

ダイナミックメモリを割り当てた場合、データベース接続を開くかファイルを開く場合は、割り当てられたメモリを解放し、データベース接続を閉じます。&クローズファイルです。

スマートポインタを使用してダイナミックメモリを割り当てた場合、割り当てられたメモリの解放について心配する必要はありません。スマートポインタはスコープ外に出たときに割り当てられたメモリを解放します。

あなたの質問では、MyClass2オブジェクトに対して動的にメモリを割り当てました。MyClass2用の独自のデストラクタを作成する必要があります。& MyClassデストラクタと呼ばれる必要があります。 MyClass2の適切なデストラクタを記述していない場合、myobject1でdeleteを呼び出すと、MyClass2という名前のデストラクタ内のMyClassデストラクタ&が呼び出され、&という名前が付けられます。

https://www.linkedin.com/pulse/write-bu-gamindu-udayanga/?lipi=urn%3Ali%3Apage%3Ad_flagship3_profile_view_base_post_details%3BtIg1TW%2BKT7ugkY8Vs3s6Ng%3D%3D

0

あなたの質問に答えました。

"i must to delete explicit when i want to garbage the object from memory, like delete object." 

C++ではガベージコレクションはありません。新しいポインタを作成する場合は、メモリリークを避けるためにポインタを削除する必要があります。使用法に応じて、auto_ptr、unique_ptr、shared_ptrなどのヘルパークラスを使用することもできます。

関連する問題