gpt4 book ai didi

c++ - 将析构函数作为函数实现?

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

我有一个关于类的析构函数实现的问题。我知道正确的方法是使用 ~ 运算符,但请看下面的代码:

class foo
{
private:
int* abc;

public:
foo()
{
abc = new int(2);
}

~foo()
{
delete abc;
}

void func()
{
delete abc;
}
}

现在让我们说main函数定义如下:

int main(int argc, char** argv)
{
foo a;
a.func();
}

在 main 中调用 func() 时,它的工作方式是否与析构函数完全相同?在任何类似设置中,析构函数和此函数有什么区别?

最佳答案

func()~foo() 做完全相同的事情。这就是问题所在。当 a 超出范围时,它的析构函数 ~foo() 将自动被调用,导致 abc 被删除两次。解决它的一种方法是在 delete 之后的 func() 末尾将 abc 设置为 NULL >,因此当析构函数被调用时,它 delete 是一个 NULL 指针,这是 C++ 中的一种特殊情况,实际上什么都不做,并且是一个有效的操作。

或者,当然,可以以实际有意义并完成某些事情的方式重写代码。

需要明确的是,func()~foo() 之间的“区别”在于它们被调用的方式/时间,而不是它们调用的内容做。 func() 由用户手动调用,而 ~foo() 在变量超出范围时自动调用。 func() 可能被调用零次或多次(由程序员决定),但编译器只会调用 ~foo() 一次(不多也不少)在此代码中。

关于c++ - 将析构函数作为函数实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14291649/

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