高分求助,类对象间这么直接赋值会有危险吗?
时间:2011-12-04
来源:互联网
class AAA
{ public:
AAA()
{ cout<<“aaa\n"; }
AAA(int x, int y)
{ cout<<“bbb\n"; }
AAA(AAA &x)
{ cout<<“ccc\n"; }
~AAA()
{ cout<<“ddd\n"; }
};
void main()
{ AAA p1(10, 20);
AAA p2;
p2=p1;
AAA p3=p2;
}
main()函数中两个地方
AAA p3=p2;这句话肯定会调用拷贝构造函数,这没问题。
然后是 p2=p1; 这里不会调用拷贝构造函数,请问这么写有危险吗,是不是如果类里面没有指针成员数据,就没问题啊?
作者: onezzx2234 发布时间: 2011-12-04
作者: pengzhixi 发布时间: 2011-12-04
作者: qscool1987 发布时间: 2011-12-04
AAA(AAA &x)
{ cout<<“ccc\n"; }
作者: onezzx2234 发布时间: 2011-12-04
有指针的话肯定会出问题
作者: qwer_boo 发布时间: 2011-12-04
#include <iostream> #include <vector> using namespace std; class AAA { public: AAA() { cout<<"AAA()" << endl; } AAA(int x, int y) { cout<< "AAA(int,int)bb" << endl; } AAA(AAA &x) { cout<< "AAA(AAA&)" << endl; } AAA& operator = (const AAA&) { cout << "AAA::operator=" << endl; } ~AAA() { cout<< "~AAA()" << endl; } }; int main() { AAA p1(10, 20); AAA p2; p2=p1; AAA p3=p2; return 0; }
楼主,AAA p3=p2;虽然用的是=操作符,但调用的是拷贝构造函数来初始化。
而p2=p1这个则调用真正的operator=操作符,你没有写不代表编译器不给你自动生成。
构造类的时候,编译器会替该类自动生成4个函数:默认构造函数、析构函数、拷贝构造函数、赋值等于构造函数。你上面没写,编译器给你在内部自动生成了operator=,所以p2=p1回去调用operator=,我上面的测试代码你可以运行看看。
作者: wumuzi520 发布时间: 2011-12-04
假如浅拷贝 若类成员内有指针变量 会导致某一对象析构后另一对象的指针变量为野指针 即已释放 再次析构会出错
深拷贝无该隐患
作者: sryan 发布时间: 2011-12-04
C/C++ code
#include <iostream>
#include <vector>
using namespace std;
class AAA
{
public:
AAA()
{
cout<<"AAA()" << endl;
}
AAA(int x, int y)
{
……
补充,拷贝构造函数参数应该是const AAA&,(规范写法)
作者: wumuzi520 发布时间: 2011-12-04
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28