C++编译器默默生成的函数(public且inline)(如果自己没声明):
Copy构造函数
Copy assignment操作符
析构函数
Default构造函数
详解:
编译器产出的析构函数的虚属性主要来自base class
编译器产出的copy构造函数和copy assignment操作符只是单纯地将来源对象的每一个n on-static成员变量拷贝到目标对象。(浅拷贝)
/***************************
effectivre c++
改善程序与设计的55个具体做法
条款5:了解C++默默编写并调用哪些函数
---------小鱼号的代码日记--------------
****************************/
/**************************
C++编译器默默生成的函数(public且inline)(如果自己没声明):
Copy构造函数
Copy assignment操作符
析构函数
Default构造函数
编译器产出的析构函数的虚属性主要来自base class
编译器产出的copy构造函数和copy assignment操作符只是单纯地将来源对象的每一个n on-static成员变量拷贝到目标对象。(浅拷贝)
***************************/
#include<iostream>
using namespace std;
class Empty{};
template<typename T>
class NamedObjects{
public:
NamedObjects(const char* name,const T& value)
{
}
NamedObjects(const std::string& name,const T& value)
{
}
//由于其中声明了一个构造函数,编译器于是不再为它创建default构造函数。
private:
std::string nameValue;
T objectValue;
};
template<typename T>
class NamedObjectsPlus{
public:
//以下构造函数如今不再接受一个const名称,因为nameValue
//如今是个reference-to-non-const string
NamedObjectsPlus(std::string& name,const T& value):
nameValue(name),
objectValue(value)
{
}
private:
std::string& nameValue; //如今是个reference
const T objectValue; //如今是个const
};
int main()
{
Empty e1; //default构造函数
//析构函数
Empty e2(e1); //copy构造函数
e2 = e1; //copy assignment操作符
std::string str = "smallest prime number";
NamedObjects<int> no1(str,2);
NamedObjects<int> no2(no1);//调用copy构造函数
std::string newDog("persephone");
std::string oldDog("satch");
const int newY = 2;
const int oldY = 5;
NamedObjectsPlus<int> p(newDog,newY);//我们的狗 两岁了
NamedObjectsPlus<int> s(oldDog,oldY);//我们的狗 岁数很大的狗
//p = s;//??????
return 0;
}
内容选自:
effectivre c++
改善程序与设计的55个具体做法
网友评论