1. 成员函数只有被需要(被调用)才必须有定义,同理,只有当默认构造函数,拷贝构造函数,赋值操作符,析构函数被需要而类定义它们时,它们才会被编译器创建出来(除非函数在基类中被声明为虚函数,编译器产生的函数是非虚的,public的).
2. 并不是只要类没有定义默认构造函数,拷贝构造函数,赋值操作符时编译器就会自动合成它们,它们只有在"被需要"的时候才被产生.
3. 虽然编译器在类的创建者没有声明但是需要的情况下产生赋值操作符,但是有些时候编译器无法产生它,包括以下两种情况:
1). 数据成员是const对象或引用.
2). 某个基类将赋值操作符声明为private.
//
// main.cpp
// 条款05:了解C++默默编写并调用哪些函数
//
// Created by 于磊 on 2018/7/11.
// Copyright © 2018 于磊. All rights reserved.
//
#include <iostream>
using namespace std;
template <class T> class NameObject {
public:
NameObject(string &name, const T &value) {
}
NameObject(const T &value, string &name) {
}
private:
std::string nameValue;
T objectValue;
};
int main(int argc, const char *argv[]) {
std::string name("scott");
NameObject<int> no1(name, 23);
NameObject<int> no2(no1);
return 0;
}