这个使用破坏的c ++代码有什么问题?
What is wrong with this c++ code using destruction?
#include <iostream.h>
class a {
public:
~a() { cout << 1; }
};
int main()
{
a ob;
ob.~a();
return 0;
}
如果错了它有什么问题?
我已经在 Turbo C++ 上试过这段代码 运行,我仍然得到 [=13 的错误=]
member identifier expected at "ob.~a();
"line
否则猜输出结果?
您通常不会显式调用析构函数。当实例超出范围时,它们将被隐式调用。
为同一个实例调用析构函数两次会导致未定义的行为。
尽管如此,现代编译器没有编译器错误。请参阅 here。可能这是 Turbo C++ 设计者在错误消息中留下这样的罕见的好决定之一。
很少有显式调用析构函数的情况,例如如果您要维护使用 placement new.
创建的实例池
调用可能适用于 ob.a::~a()
。
也就是说,您不需要也不应该显式调用析构函数,一旦 ob
对象超出范围,它就会自动调用。
#include <iostream.h>
class a {
public:
~a() { cout << 1; }
};
int main()
{
a ob;
ob.~a();
return 0;
}
如果错了它有什么问题?
我已经在 Turbo C++ 上试过这段代码 运行,我仍然得到 [=13 的错误=]
member identifier expected at "
ob.~a();
"line
否则猜输出结果?
您通常不会显式调用析构函数。当实例超出范围时,它们将被隐式调用。
为同一个实例调用析构函数两次会导致未定义的行为。
尽管如此,现代编译器没有编译器错误。请参阅 here。可能这是 Turbo C++ 设计者在错误消息中留下这样的罕见的好决定之一。
很少有显式调用析构函数的情况,例如如果您要维护使用 placement new.
创建的实例池调用可能适用于 ob.a::~a()
。
也就是说,您不需要也不应该显式调用析构函数,一旦 ob
对象超出范围,它就会自动调用。