class A
{
public:
A()
{
std::cout << "I am ctor\n";
}
~A()
{
std::cout << "I am dtor\n";
}
void printme()
{
std::cout << "I am printme\n";
}
};
int main()
{
A aobj;
aobj.printme();
aobj.~A();
aobj.printme();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
$./testdtor
I am ctor
I am printme
I am dtor
I am printme
I am dtor
Run Code Online (Sandbox Code Playgroud)
对析构函数的显式调用行为类似于普通函数调用,一旦对象超出作用域,就会调用析构函数,但我想知道哪个实体?
编译器为所有自动对象生成析构函数调用代码.以与对象构造顺序相反的顺序调用这样的析构函数.
该delete话务员通话对象的析构驻留在该地址指向的对象由操作参数,通常是(我要说总是与动态对象使用).
这种行为允许可靠的内存管理和我们非常喜欢的许多其他有用的技巧C++.
您可能并且在大多数情况下手动调用析构函数的唯一情况是使用placementnew运算符分配对象时.
这取决于对象的位置以及对象的生命周期.
atexit后的机制调用的代码mainnew由相应的delete-expression生成的代码创建的对象| 归档时间: |
|
| 查看次数: |
295 次 |
| 最近记录: |