社区
C++ 语言
帖子详情
拷贝构造函数与“=”赋值号的区别是什么?
babyding
2005-04-26 02:12:55
在c++中,用对象去初始化对象时。系统自动调用拷贝构造函数,来初始化。
但是这个与赋值号“=”的区别,是什么?赋值号也可以进行初始化对象的.
...全文
442
27
打赏
收藏
拷贝构造函数与“=”赋值号的区别是什么?
在c++中,用对象去初始化对象时。系统自动调用拷贝构造函数,来初始化。 但是这个与赋值号“=”的区别,是什么?赋值号也可以进行初始化对象的.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
27 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xjp6688
2005-04-28
打赏
举报
回复
注意深拷贝和浅拷贝的问题,否则内存容易出现问题
zdy_8212
2005-04-28
打赏
举报
回复
挺像值传递和指针传递
lw1a2
2005-04-27
打赏
举报
回复
运行一下这个程序吧:
#include <iostream>
using namespace std;
class A
{
public:
A(){i=0;cout<<"Default Constructor"<<endl;}
A(const A& rhs)
{
i=rhs.i;
cout<<"Copy Constructor"<<endl;
}
A& operator=(const A& rhs)
{
if(this!=&rhs)
i=rhs.i;
cout<<"="<<endl;
return *this;
}
int i;
};
int main()
{
A a;
a.i=1;
A b=a;
cout<<b.i<<endl;
system("pause");
}
seaman117
2005-04-27
打赏
举报
回复
一句话拷贝构造函数是给即将创建的对象拷贝,赋值是给已经存在的对象赋值!
withc
2005-04-27
打赏
举报
回复
就是实现的内部代码不一样。
如果你写成了一样的,那就一样了。
qhfu
2005-04-26
打赏
举报
回复
operator=();
和拷贝构造函数的实现就不一样,
拷贝构造函数首先是一个构造函数,它调用的时候产生一个对象,是通过参数传进来的那个对象来初始化,产生的对象。
operator=();是把一个对象赋值给一个原有的对象,所以如果原来的对象中有内存分配要先把内存释放掉,而且还要检查一下两个对象是不是同一个对象,如果是的话就不做任何操作。
qhfu
2005-04-26
打赏
举报
回复
应该不是,,而是调用默认的 operator=();
haiyan2004
2005-04-26
打赏
举报
回复
直接用=是不是要调用默认拷贝构造函数?
各位大虾请指教
haiyan2004
2005-04-26
打赏
举报
回复
那个默认拷贝构造函数是干什么用的
gogdo
2005-04-26
打赏
举报
回复
你只要记住拷贝构造函数是用于类中指针,对象间的COPY
以后多用你就会慢慢明白。
寻开心
2005-04-26
打赏
举报
回复
单纯从拷贝还是=上分析它没有太多的意义
因为他们在某些场合下都是可以省略的(内部对象都有复制或者拷贝函数原形的时候)
uoyevoli
2005-04-26
打赏
举报
回复
http://blog.csdn.net/uoyevoli/archive/2005/04/21/357448.aspx
看看这里,对你有没有帮助。
寻开心
2005-04-26
打赏
举报
回复
一般来说是在数据成员包含指针对象的时候,应付两种不同的处理需求的
一种是复制指针对象,一种是引用指针对象
copy大多数情况下是复制,=则是引用对象的
例子:
class A
{
int nLen;
char * pData;
}
显然
A a, b;
a=b的时候,对于pData数据存在两种需求,
第一种copy
a.pData = new char [nLen];
memcpy(a.pData, b.pData, nLen);
另外一种(引用方式):
a.pData = b.pData
通过对比就可以看到,他们是不同的
往往把第一种用copy使用,第二种用=实现
lw1a2
2005-04-26
打赏
举报
回复
我说的不对呀, v41dugu(一步一生)是对的
useresu
2005-04-26
打赏
举报
回复
自引用的说法好象欠妥,是自己给自己赋值.
举个例子了,
CB& CB::operator=(const CB& rhs)
{
// 检查对自己赋值的情况
if (this == &rhs) return *this;
...
}
useresu
2005-04-26
打赏
举报
回复
区别?
好象楼上的都没说到这点:
那就是=实现时需要检查自引用,
而拷贝构造函数不用的.
呵呵,补个漏.混分啊
zhousqy
2005-04-26
打赏
举报
回复
同意樓上的。
dongpy
2005-04-26
打赏
举报
回复
赋值号也可以进行初始化对象的.
==================================
A a1;
A a2 = a1;
//这里虽然是赋值号,只是初始化的另一种形式。
//其实就是A a2(a1);用拷贝构造函数来初始化对象a2。
babyding
2005-04-26
打赏
举报
回复
lw1a2(一刀(P540)) :你说的是不是就是先用构造函数初始化一个对象,再用这个对象是赋值另一个对象,要比直接用拷贝构造函数慢。such as:
class C
.
.
C a(初始化的值),b;
b=a;//这个效率没有C b(a);高。
有没有其他的不同了,他们的作用是一样的啊。
beyondtkl(大龙驹<學,無涯>)
我说的是
class C
.
.
C a(初始化的值),b;
b=a;//用对象去赋值
和C b(a);//用拷贝构造函数去初始化对象。
这两个都可以初始化对象b.但区别何在?
lw1a2
2005-04-26
打赏
举报
回复
我说错了
加载更多回复(7)
C中
拷贝构造函数
与
赋值
运算符的
区别
是什么?
- **
拷贝构造函数
**:是一种特殊的构造函数,用于创建一个新对象并用现有对象初始化它。- **浅拷贝**:只复制指针的地址,不复制指针指向的内容。- 要求 `=` 的左右对象均已存在,它的作用就是把 `=` 右边的对象的值...
拷贝构造函数
与
赋值
构造函数
拷贝构造函数
与
赋值
构造函数 在C++中,如果要创建一个新的类,并用已有的类来给它附初值。就要用到
拷贝构造函数
,
拷贝构造函数
又分为两种。 1.合成的
拷贝构造函数
在你没有定义自己的
拷贝构造函数
而又调用了拷贝构造...
拷贝构造函数
、拷贝
赋值
函数——C++篇
一、拷贝
赋值
函数与
拷贝构造函数
拷贝
赋值
函数和
拷贝构造函数
,都是通过已存在的一个类对象对另外一个类对象进行初始化的操作,但两者有着本质上的
区别
: 拷贝
赋值
函数:针对一个已经存在的对象进行初始化操作。 ...
C++中构造函数,
拷贝构造函数
和
赋值
函数的
区别
和实现
C++中一般创建对象,拷贝或
赋值
的方式有构造函数,
拷贝构造函数
,
赋值
函数这三种方法。 构造函数就是当创建一个类的对象时,它被调用来对类的数据成员进行初始化和分配内存。
拷贝构造函数
是一种特殊的构造函数,用...
c++primer 第十三章
拷贝构造函数
、拷贝
赋值
函数、=default、删除函数、析构函数
拷贝构造函数
是什么?
拷贝构造函数
是用来定义 同类型的另一个对象初始化本对象时,所做的工作。 它的函数写法是 class F{ public: F(const F&){}; }: 如果没有定义
拷贝构造函数
,编译器会定义默认的...
C++ 语言
65,210
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章