编译器可以暗自为class创建default构造函数,copy构造函数,copy assignment操作符,以及析构函数。
class Empty{};
class Empty
{
public:
Empty() {};
Empty(const Empty& rsh) {};
~Empty() {};
Empty& operator=(const Empty& rhs) {};
};
只有当代码合法且有适当机会证明它有意义,例如下面的代码copy assignment操作符就无法使用
template<class T>
class NameObject
{
public:
NameObject(string& name, const T& value) :
NameValue(name), objectName(value)
{
}
void operator=(const NameObject& rhs)
{
NameValue = rhs.NameValue;
objectName = rhs.objectName;
}
private:
string& NameValue;
const T objectName;
};
string newDog("Persephone");
string oldDog("Sactch");
NameObject<int> p(newDog, 2);
NameObject<int> s(oldDog, 2);
p = s;