gpt4 book ai didi

c++ - 我正在失去控制并且无法调试

转载 作者:行者123 更新时间:2023-11-30 01:59:00 24 4
gpt4 key购买 nike

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

有人可以分享两者背后的技术细节吗?

最佳答案

你应该使用delete在使用 new 构造的指针上(或分配给使用 new 构造的其他指针的指针),没有异常(exception)(据我所知)。

使用 delete在任何其他情况下(这是第一种情况下发生的情况,因为 fnDeleteBase 的参数是指向 Base aBase 的指针,它不是指针并且那里没有 new 关键字)导致未定义的行为。

解释编译器到底做了什么并不会真正有帮助,因为对于未定义的行为,这可能因编译器而异。应该不惜一切代价避免这种情况。

关于c++ - 我正在失去控制并且无法调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16626138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com