class Base
{
private:
int nID;
friend int fnDeleteBase(Base* base);
public:
Base( int baseID):nID(baseID) { cout << "Base Constructed with value" << endl; }
Base () : nID(5){cout << "Base Constructed WITHOUT value" << endl; }
~Base() { cout << "Base class object killed " << endl; }
};
int fnDeleteBase(Base* base) // Line 1
{
delete base; // Line 2 - important
cout << "Base object deleted " << endl;
return (1);
}
int main()
{
Base aBase; // Line 3
try
{
int i = fnDeleteBase(&aBase); // Line 4
}
catch(...)
{
cout << "Exception handled " << endl;
}
return (0);
}
私がデバッグしていた上記のコードスニペット。基本オブジェクトを削除している 2 行目に入ることができません。行 2 にステップインまたは実行しようとするとすぐに、制御が行われ、デバッグまたは実行を強制終了する必要があります。
私が得る出力は次のとおりです。
Base Constructed (any of the construction is valid)
Base class Object killed
ただし、すべて正常に動作し、3 行目をBase * aBase = new Base();
. コンソールの出力は次のとおりです。
Base Constructed (any of the construction is valid)
Base class Object killed
Base object Deleted
誰かが 2 つの背後にある技術的な詳細を共有できますか?