gpt4 book ai didi

c++ - Try-Catch 和 Delete[] 问题

转载 作者:太空宇宙 更新时间:2023-11-04 14:42:33 24 4
gpt4 key购买 nike

我在 try-catch 情况下遇到了一些问题,这里是代码(非常简单):

struct Something
{
int A, B, C;
Something()
{
A = B = C = 0;
}
~Something()
{
cout << "Destructor " << endl;
}
};

int main()
{
Something * s = new Something;

//Something * s = new Something[5];

try
{
delete[] s;
}
catch(exception& e)
{
delete s;
}
return 0;
}

我打算做的是先尝试把指针作为一个数组来删除,如果失败了,再做一个简单的删除。

因此,当我第一次尝试使用“Something”数组(如注释行中所示)时,itr 运行良好。但是当我像现在这样尝试时,我遇到了一个可怕的错误。

有什么想法吗?

最佳答案

您尝试做的既不是合法的 C++,也没有任何意义。

使用new 的分配必须跟在使用delete 的删除之后,并且使用delete[ ];这必须完全像那样发生,其他一切都是未定义的行为。

您不能“尝试看看您是否编写了正确的代码”。异常表示异常运行时行为,但您的错误是静态编译时错误,无法处理,但必须修复。 p>

但是,您的代码中永远不应该有一点您不知道给定指针的含义!由于该语言是静态类型的,原则上您应该始终了解所涉及的类型。如果你想传递对象(可能是多态的),那么任何需要动态分配的东西都应该包装在它自己的管理器类中(比如 shared_ptrunique_ptr)。

关于c++ - Try-Catch 和 Delete[] 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7604921/

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