1

ポインターであるメンバーを持つ構造体/クラスがあります。

struct myStruc
{
    int* m_p;
}

1. 質問:どこでポインタを削除すればよいですか? デストラクタで?

myStruct::~myStruct()
{
    delete m_p;
}

2. 質問:ポインターがポインター配列に割り当てられている場合はどうなりますか?

myStruct mS;
mS.m_p = new int[3];

私がしなければならない場合、今すぐ良い方法(dynamic_castまたはtry-catchなし)はありますdeletedelete[]

4

3 に答える 3

2

理想的には、生のポインター メンバーをまったく使用しないでください。より良いオプションが 2 つあります。

  1. std::vectorまたは を使用する
  2. メンバーとしてスマート ポインターを使用し、使用法のセマンティックに従って適切なポインターを選択します

スマート ポインターを使用できず、生のポインターを使用する必要がある場合は、次のようにします。

  • を使用してポインタを割り当てる場合は を使用しnew、使用するdelete場合は を使用new []する必要がありますdelete []。不一致があってはなりません。
  • この動的に割り当てられたメンバーの有効期間が終了するたびにdeleteorを呼び出す必要があります。delete []このメンバーの有効期間がクラスの有効期間と同じであると仮定すると、それはデストラクタになります。
  • 重要な部分は、3 つのルールに従う必要があるということです。
于 2013-04-10T14:33:06.433 に答える