- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
考虑类的情况,它没有开发人员明确声明的析构函数
和构造函数
。我知道在这种情况下,类的析构函数
将被隐式声明
。那么析构函数
是不是真的隐式定义
,只有在类的一个对象即将被销毁时才定义?
构造函数的行为是否也与上述相同。是否仅在创建类的对象时才隐式定义
?
编辑
class A {
public:
};
int main() {
}
在上面的代码中,~A() 将被隐式声明。我的问题是析构函数的定义是否真的会隐含地进行,只有当类的对象被实例化时
class A {
public:
};
int main() {
A a;
}
或者它是隐式定义的,即使对象实例化没有完成?
最佳答案
是的,隐式声明的默认构造函数和析构函数在用于创建或销毁对象实例时被隐式定义。用标准 (C++11) 的话来说:
12.1/6: A default constructor that is defaulted and not defined as deleted is implicitly defined when it is odr-used (3.2) to create an object of its class type (1.8) or when it is explicitly defaulted after its first declaration.
12.4/5: A destructor that is defaulted and not defined as deleted is implicitly defined when it is odr-used (3.2) to destroy an object of its class type (3.7) or when it is explicitly defaulted after its first declaration.
所以它们是在您的第二个代码片段中定义的,该代码片段创建和销毁类型为 A
的对象,但在第一个代码片段中没有定义,而第一个片段没有。
关于c++ - 隐式定义的类的析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8563116/
我是一名优秀的程序员,十分优秀!