条款05: 了解c++默默编写并调用哪些函数

1. 如果没有声明任何构造函数,编译器会为你声明一个default构造函数
2. 惟有default构造函数被需要,才会被编译器创建出来

class Empty
{
public:
    Empty() {}//1. 默认构造
    ~Empty() {} //2. 析构函数
    Empty(const Empty& rhs) {} //3. copy构造
    Empty& operator=(const Empty& rhs) {} //4. copy赋值
};

1. 声明了构造函数,编译器于是不再为它创建default构造函数
2. 内置类型默认拷贝构造,每个成员变量对应初始化
3. 内置类型默认拷贝赋值基本于默认拷贝构造一致
4. 对于成员变量为引用类型或const类型,拒绝生成默认拷贝构造和赋值

template<typename T>
class NameObject
{
public:
    NameObject():
        nameValue(),objectValue()
    {}
    NameObject(const std::string& name, const T& value) :
        nameValue(name), objectValue(value)
    {}
    const std::string& NameValue()const
    {
        return nameValue;
    }
private:
    //std::string& nameValue; //拒绝生成
    //const std::string nameValue; //拒绝生成
    std::string nameValue;
    T objectValue;

};

void Test00()
{
    NameObject<int> no1("Smallest Prime Number", 2);
    NameObject<int> no2(no1); //调用默认拷贝构造
    std::cout << no2.NameValue() << std::endl;
    NameObject<int> no3;
    no3 = no1; //调用默认拷贝赋值
    std::cout << no3.NameValue() << std::endl;
}

 

posted @ 2024-09-07 22:07  博瑜图形  阅读(15)  评论(0)    收藏  举报