大神,谁能否帮我详解一下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);