san*_*eep 2 c++ copy-constructor
class member
{
public:
member()
{
cout<<"Calling member constr"<<'\n';
}
member(const member&)
{
cout<<"Calling member copy constr"<<'\n';
}
};
class fred
{
public:
fred()
{
cout<<"calling fred constr"<<'\n';
}
fred(const fred &)
{
cout<<"Calling fred copy constr"<<'\n';
}
protected:
member member_;
};
int main()
{
fred a;
fred b=a;
}
Output:
Calling member constr
calling fred constr
**Calling member constr**
Calling fred copy constr
Run Code Online (Sandbox Code Playgroud)
ken*_*ytm 16
因为你没有调用member复制构造函数.如果覆盖默认的复制构造函数,则需要显式复制成员fred.
fred(const fred& other) : member_(other.member_) {
cout<<"Calling fred copy constr"<<'\n';
}
Run Code Online (Sandbox Code Playgroud)
它未被调用,因为您明确要求编译器不要调用它.当你为类定义自己的拷贝构造函数时fred,你基本上告诉编译器你想要把事情掌握在自己手中并自己进行复制.既然你什么都不做复制member_中fred的拷贝构造函数,它是不可复制的.
如果你摆脱了fred复制构造函数的显式定义,编译器将为你提供一个隐式的,它将调用member复制构造函数进行复制member_.
如果你坚持fred自己定义复制构造函数,就必须member_像KennyTM建议的那样复制自己.
| 归档时间: |
|
| 查看次数: |
322 次 |
| 最近记录: |