问题描述
- 拷贝构造函数和拷贝赋值运算符的调用问题
- 假设有如下类:
class HasPtr{
public:
HasPtr(const string &s):
ps(new string(s))i(0){}
HasPtr(const HasPtr &hp){ps=new string(*hp.ps);
i=hp.i;
}
HasPtr(const char *s):ps(new string(s))i(0){}
HasPtr & operator=(const HasPtr &);
private:
string *ps;
int i;};
情况一 :HasPtr h1(""hehe"")h2; h2=h1; 问:编译器会优先调用拷贝构造函数和拷贝赋值运算符?
情况二:假如没有定义拷贝构造函数,执行与上述相同的代码。问:编译器会优先调用自定义的拷贝赋值运算符,还是编译器合成的拷贝构造函数?
新手求大神指教。
解决方案
h1是构造,h2是赋值
只有HasPtr h2(h1)
才是拷贝构造
解决方案二:
有自定义的肯定是使用自定义的。不然还要自定义的干嘛。
解决方案三:
C++拷贝构造函数(深拷贝,浅拷贝)
解决方案四:
上述代码调试的时候h2并没有按照预想的情形编译器会调用赋值运算符的重载函数
解决方案五:
http://www.cnblogs.com/BlueTzar/articles/1223313.html
时间: 2024-11-02 11:15:02