读书人

C++基础构造函数解决方案

发布时间: 2013-04-07 12:50:11 作者: rapoo

C++基础,构造函数
一个很简单的问题,但是不是很明白,求大神,看C++ primer plus有这样一个例子:
大概是这样的




还有一个很2的问题:
return Vector(a+mv1.a,b+mv1.b)
这句话是怎么理解呢?如果是这样
Vector mv2=Vector(a+mv1.a,b+mv1.b);
return mv2;
这两种写法一样吗?
按照书上的解释,应该是先在函数体内生成了一个临时对象,然后按值返回,应该调用了拷贝构造函数生成了全局的一个临时对象。但是无论那种写法,我运行的结果都没看到拷贝构造函数的调用...
不知道说清楚了么,求开解..
[解决办法]
个人猜测这个应该是编译器给优化了。
还有,destructor是析构函数,constructor是构造函数。
[解决办法]

MyVector MyVector::operator+(const MyVector & mv1){
return MyVector(a+mv1.a,b+mv1.a);
}

return MyVector(a+mv1.a,b+mv1.a)称为返回值优化,编译器直接把这个对象创建在外部返回值的内存单元,不会真正创建一个局部对象,也就是会调用MyVector::MyVector(int i,int j)这个构造函数。如果改成这样就会调用拷贝构造函数了:

MyVector MyVector::operator+(const MyVector & mv1)
{
a += mv1.a;
b += mv1.b;
return *this;


}



读书人网 >C++

热点推荐