弄清C++在幕后为你所写、所调用的函数
|  | ||
条款45: 弄清C++在幕后为你所写、所调用的函数
一个空类什么时候不是空类? ---- 当C++编译器通过它的时候。如果你没有声明下列函数,体贴的编译器会声明它自己的版本。这些函数是:一个拷贝构造函数,一个赋值运算符,一个析构函数,一对取址运算符。另外,如果你没有声明任何构造函数,它也将为你声明一个缺省构造函数。所有这些函数都是公有的。换句话说,如果你这么写:
class Empty{};
和你这么写是一样的:
class Empty {
public:
  Empty();                        // 缺省构造函数
  
Empty(const Empty& rhs);        // 拷贝构造函数
  ~Empty();                       // 析构函数 ---- 
是否
                                  // 为虚函数看下文说明
  Empty&
  
operator=(const Empty& rhs);    // 赋值运算符
  Empty* operator&();             // 取址运算符
  const Empty* 
operator&() const;
};
现在,如果需要,这些函数就会被生成,但你会很容易就需要它们。下面的代码将使得每个函数被生成:
const Empty e1;                     // 
缺省构造函数
                                    // 析构函数
Empty e2(e1); // 拷贝构造函数
e2 = e1; // 赋值运算符
Empty *pe2 = &e2;                   // 
取址运算符
                                    // (非const)
const Empty *pe1 = &e1;             //  
取址运算符
                                    // (const)
from:<effective c++>
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号