大神,谁能否帮我详解一下c++中在建立对象时 初始化和赋值的差异呢?

大神,谁能否帮我详解一下c++中在建立对象时 初始化和赋值的差异呢?谢谢,不胜感激!

8个回答

看你赋值说的是什么意思。
比如说

 class A
{
public:
    A(int i)
    {
        cout << "A(int)" << i << endl;
    }
};

int main()
{
    A a = 1;
}

运行
A(int)1
Press any key to continue . . .
同样的定义
A b = a;
就不会调用构造函数
但是如果你定义了拷贝构造函数,又不一样了。

所以不能简单根据等号去判断。

wuvalue
wuvalue 谢谢
5 年多之前 回复

赋值操作是在两个已经存在的对象间进行的,而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。编译器会区别这两种情 况,赋值的时候调用重载的赋值运算符,初始化的时候调用拷贝构造函数。

从使用上讲:
1. 初始化显然要比赋值快一点,越是大型的对象越应该初始化而不要定义后再赋值
2. 如果定义了const,则只能初始化,不能随后赋值。

初始化就是开辟一块内存,新建一个对象,并赋予数据,而赋值就是内存之前就已经被开辟了,只是改变内存里面的数据而已

C++对象创建时先调用operator new申请空间,然后调用operator new 调用构造函数来初始化对象中的子对象。
如果你需要赋值,最好自己来实现赋值操作符重载函数。在 Object b;Object a=b;时回调用赋值操作符重载函数 Object& operator=(const Object& other);
在使用 Object b; Object a(b);时会调用拷贝构造函数,最好也自己实现 Object(const Object& other);

wuvalue
wuvalue 回复wuvalue: 谢谢
5 年多之前 回复
wuvalue
wuvalue 回复mymodian:
5 年多之前 回复
mymodian
mymodian 第二个是replacement new,打错了
5 年多之前 回复

初始化是开辟空间
赋值是向空间里放数据

初始化和赋值是两种不同的过程,一般都认为是一样的效果,上面的大神解释的很详细了

初始化是调用构造函数,从而实例化一个对象。而赋值是对一个已经生成的对象再赋予新的数据。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐