我坚持使用我的析构函数 我的简短代码结构是这样的
class test
{
private:
string code;
int digit, num_digit;
//destructor
~test()
{
if(digit >= 0 && digit > num_digit)
{
for(unsigned int i=0; i<code.length(); i++) delete &code[i];
}
}
};
<more code> .............
<more code> .............
int main()
{
Test test1
test1.~test();
}
在浏览析构函数的部分时,我的核心会中止。 Unix编译说Aborted - 'core dumped' 有什么好主意吗?
答案 0 :(得分:7)
正在发生中止,因为正在尝试delete
未动态分配的对象:仅delete
通过new
创建的内容(和{{1} } delete[]
)。 new[]
成员未动态分配。当包含对象被销毁时,它将被自动销毁。在code
的情况下,没有理由手工编写析构函数。
这是不正确的:
Test
不要显式调用对象的析构函数。当test1.~test();
超出范围时,将自动调用析构函数。对于动态分配的对象,析构函数将在test1
d。
答案 1 :(得分:3)
您只能删除通过调用new创建的指针。
您正在删除堆栈上指向字符串的指针。这为您提供了核心转储。