编译器自动生成析构函数今天翻《c++ primer 4th》时,关于“析构函数”,有如下描述:“与复制构造函数或赋值操作
编译器自动生成析构函数 今天翻《c++ primer 4th》时,关于“析构函数”,有如下描述: “与复制构造函数或赋值操作符不同,编译器总是会为我们合成一个析构函数。 ... 析构函数与复制构造函数或赋值操作符之间的一个重要区别是,即使我们编写了自己的析构函数,合成析构函数仍然运行。 ” 也就是说,无论是否为类显示提供析构函数,编译器都会自动生成一个(它提供的)析构函数。
然后我翻了一下c++ 11文档(ISO/IEC 14882),里面关于“析构函数”这一节,第4条: “ 4 If a class has no user-declared destructor, a destructor is implicitly declared as defaulted (8.4). An implicitly-declared destructor is an inline public member of its class. 5 A defaulted destructor for a class X is de?ned as deleted if: ... ” 这第4条提了个前提条件:“If a class has no user-declared destructor”。我E文不好,请问大虾们,这与《c++ primer》的描述冲突不?标准是否是说,如果一个类没有用户提供的析构函数,才由编译器合成一个默认的析构函数?
[解决办法] if then does not equal to if not then not [解决办法] 4 If a class has no user-declared destructor, a destructor is implicitly declared as defaulted (8.4). An implicitly-declared destructor is an inline public member of its class.
So do you mean that a class can have 2 destructors??? [解决办法] 其实就是一句很简单的话:你写下的析构函数并不是真正的完整版的析构函数,一定要加上编译器自动生成的那部分。 只是,对若干简单类,编译器自动生成的那部分为空。 [解决办法] 你写了析构函数编译器就不会合成了,一个类只能有一个析构函数。 [解决办法]