Nat*_*822 0 c++ oop destructor
我有一个关于析构函数的类实现的问题.我理解正确的方法是使用〜运算符,但请看下面的代码:
class foo
{
private:
int* abc;
public:
foo()
{
abc = new int(2);
}
~foo()
{
delete abc;
}
void func()
{
delete abc;
}
}
Run Code Online (Sandbox Code Playgroud)
现在让我们说主要功能定义如下:
int main(int argc, char** argv)
{
foo a;
a.func();
}
Run Code Online (Sandbox Code Playgroud)
在main中调用func()函数时,它的工作方式与析构函数完全相同吗?在任何类似的设置中,析构函数和此函数之间有什么区别?
func()
并~foo()
做同样的事情.这就是问题所在.当a
超出范围时,它的析构函数~foo()
将自动被调用,从而导致abc
被删除两次.解决它的一种方法是设置abc
为NULL
在结束func()
之后delete
,以便当析构函数被调用时它delete
是一个NULL
指针,这是C++中的一个特例,其中没有任何实际操作并且是一个有效的操作.
或者,当然,代码可以以实际有意义并完成某些事情的方式重写.
而只是要真正明确,"差异化"之间func()
和~foo()
如何/他们是所谓的时候,而不是在他们做什么.func()
由用户手动调用,而~foo()
在变量超出范围时自动调用.func()
可能被调用零次或多次(由程序员决定),但编译器将~foo()
在此代码中调用一次(不多,不少).
归档时间: |
|
查看次数: |
3531 次 |
最近记录: |