1
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 つの背後にある技術的な詳細を共有できますか?

4

1 に答える 1