これは、私のクラス設定の簡素化されたバージョンです。
class CMyClass : public CDialog
{
CMyClass(CWnd *pParent = NULL); // constructor
~CMyClass();
_ CBrush *_pRadBkgColor; // background color of a radio button
}
CMyClass::CMyClass(CWnd *pParent /*=NULL*/)
{
// assign CBrush pointer to a new brush
_pRadBkgColor = new CBrush(RGB(0xFF, 0xFF, 0xFF));
}
CMyClass::~CMyClass()
{
if( _pRadBkgColor != NULL )
{
delete _pRadBkgColor
}
_pRadBkgColor = NULL;
}
ここで、微妙なエラーのコードを解析するツールを実行すると、次のようになります。
代入演算子を持たないクラス「名前」のコンストラクターの新しい -- 引用されたクラスのコンストラクター内で、新しいものが登場しました。ただし、このクラスには代入演算子が宣言されていません。おそらく、一部のクラス メンバー (または複数のメンバー) が、動的に割り当てられたメモリを指している可能性があります。このようなメモリは、デフォルトの代入演算子では適切に処理されません。通常、カスタム代入演算子が必要になります。したがって、x と y が両方とも Symbol x = y; 型の場合。ポインタの重複が発生します。後で削除すると混乱が生じます。
CBrush ポインターである 2 つのメンバー変数がある場合、それらaを呼び出して、コンストラクターでb初期化aしnew、後で言う(または、実際には他のアドレスb = aに割り当てる...aそれを一定にするのが最善です)、次にaまたはを削除するbと、混乱が生じます。
そのような割り当てを行わない場合、これは安全ですか?
ありがとうスティーブン