2012-02-12 9 views
-3

ローカルに定義されたもののアドレスを返すことはできませんので、プログラム内の他の機能がアクセスできるように、この要素を配置するために 'ヒープ'にメモリを割り当てる必要があります。誰かがこれをもっと詳しく説明できますか?ヒープとは何ですか? ( 'new'を使用)

MyClass* myFunc() 
{ 
    MyClass* pMC = new MyClass; 
    return pMC; 
} 

機能名には*の目的はありますか?これは何を示していますか? 私はMyClass型のポインタの作成があり、このオブジェクトの 'ヒープ'上に新しい割り当てを指していることを認識しています。私はちょうどそれが正確に何の有用性を理解するために失敗します。

+0

ライフタイムを手動で管理する必要がある*動的オブジェクト*と、このような手動オブジェクトを作成するには 'new'が必要です。あなたがそれをしている間に電子ブックを投げ捨ててください:-)(私はそれを '削除 'しなければならないでしょう) –

+0

ダミーのためのC++ 5th – bden

+0

[メモリヒープとは何ですか?](http: /stackoverflow.com/questions/2308751/what-is-a-memory-heap) –

答えて

2

オブジェクトが明示的に破棄されるまで、オブジェクトは常に存在するということです。

多くの理由から、この破壊を自分自身で処理することは非常に悪い考えです。たとえば、一意または共有の所有権など、さまざまな時点で自動的にクリーンアップするスキームが多数存在します。これは、newを直接使用するコードが非常に悪いことを意味し、new[]delete、またはdelete[]に対してはトリプルです。

一意の所有権では、オブジェクトを所有するポインタが1つあり(std::unique_ptr<T>)、オブジェクトが破棄されるとオブジェクトが破棄されます。これは移動のみです。共有所有権では、オブジェクトを指しているものがあれば(std::shared_ptr<T>)、オブジェクトは生きています。最後のものが破壊されると、オブジェクトも破壊されます。

関連する問題