これは、私のクラス設定の簡素化されたバージョンです。
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
と、混乱が生じます。
そのような割り当てを行わない場合、これは安全ですか?
ありがとうスティーブン