问题描述
- 大神,谁能否帮我详解一下c++中在建立对象时 初始化和赋值的差异呢?
- 大神,谁能否帮我详解一下c++中在建立对象时 初始化和赋值的差异呢?谢谢,不胜感激!
解决方案
看你赋值说的是什么意思。
比如说
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;
就不会调用构造函数
但是如果你定义了拷贝构造函数,又不一样了。
所以不能简单根据等号去判断。
解决方案二:
赋值操作是在两个已经存在的对象间进行的,而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。编译器会区别这两种情 况,赋值的时候调用重载的赋值运算符,初始化的时候调用拷贝构造函数。
解决方案三:
从使用上讲:
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);
解决方案六:
初始化是开辟空间
赋值是向空间里放数据
解决方案七:
初始化和赋值是两种不同的过程,一般都认为是一样的效果,上面的大神解释的很详细了
解决方案八:
初始化是调用构造函数,从而实例化一个对象。而赋值是对一个已经生成的对象再赋予新的数据。
时间: 2024-07-28 18:03:21