锁定老帖子 主题:关于C++拷贝构造函数的疑惑
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-03-28
最后修改:2012-03-28
#include "stdafx.h" class CTest { public: CTest(){}; CTest(const CTest &test); CTest& operator=(const CTest &test); public: int a; }; CTest::CTest(const CTest &test) { // 1. 使用如下方式正常 this->a = test.a; // 2. 使用如下方式会引起栈异常 *this = test; } CTest& CTest::operator=(const CTest &test) { if (&test == this) return *this; *this = test; return *this; } int _tmain(int argc, _TCHAR* argv[]) { CTest test1; test1.a = 10; CTest *pTest = new CTest(test1); delete pTest; return 0; } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-03-29
第28行不会无限循环吗?
|
|
返回顶楼 | |
发表时间:2012-03-29
chaooo 写道 第28行不会无限循环吗?
为什么会无限循环啊? |
|
返回顶楼 | |
发表时间:2012-03-30
因为在第28行在“=”的函示里面,然后你又用了=号,所以“=”函示会自己运行自己,无限运行下去
|
|
返回顶楼 | |
发表时间:2012-04-12
这两种方式含义完全不一样,第二种方式不异常才说不过去。
|
|
返回顶楼 | |
发表时间:2012-04-12
最后修改:2012-04-12
“=”重载了
|
|
返回顶楼 | |
发表时间:2012-04-13
最后修改:2012-04-13
改成
CTest& CTest::operator=(const CTest &test) { if (&test == this) return *this; this->a = test.a; return *this; } |
|
返回顶楼 | |
发表时间:2012-04-14
给 *this 赋值就不对
|
|
返回顶楼 | |
发表时间:2012-04-16
拷贝构造 如此写 专门拿来玩的? 还是?
|
|
返回顶楼 | |
发表时间:2012-04-17
lc7cl 写道 改成
CTest& CTest::operator=(const CTest &test) { if (&test == this) return *this; this->a = test.a; return *this; } 我猜楼主是想这样 CTest& CTest::operator=(const CTest &test) { if (&test == this) return *this; //this->a = test.a; memcpy(this,&test,sizeof(CTest)); return *this; } 不过这样会导致内存泄露。估计是变量多不想一个个写 ![]() |
|
返回顶楼 | |