关于C++中返回一个类对象的一点疑问?解决方案
关于C++中返回一个类对象的一点疑问?
C++ Primer 14.8节专门讨论了C++不能有效的返回一个类对象的问题,并认为这是C++语言的一个重要缺陷。
//没有办法保证内存不会丢失
//因为类Matrix可能很大,所以这种丢失可能很严重
Matrix& operator+( const Matrix& m1, const Matrix& m2 )
{
Matrix *result = new Matrix;
//do the addition
return *result;
}
这种方法将会导致很严重的内存泄漏,肯定是不可行的。
我的疑问是,是否可以定义一个局部静态对象作为函数的返回值,一样通过引用返回,不是就高效的返回了一个类对象了么?
Matrix& operator+( const Matrix& m1, const Matrix& m2 )
{
static Matrix result = m1+m2;
return result;
}
静态局部对象的内存将会在程序完成后自动释放,请问这样有何不妥?
------解决方案--------------------
如果返回对象的值,会引发构造函数,如果对象很大的话成本就很高
所以一般是返回const引用或指针
------解决方案--------------------
不行的
这种情况怎么办?
Matrix m1, m2, m3, m4, m5;
m5 = (m1+m2)+(m3+m4);
C++ Primer 14.8节专门讨论了C++不能有效的返回一个类对象的问题,并认为这是C++语言的一个重要缺陷。
//没有办法保证内存不会丢失
//因为类Matrix可能很大,所以这种丢失可能很严重
Matrix& operator+( const Matrix& m1, const Matrix& m2 )
{
Matrix *result = new Matrix;
//do the addition
return *result;
}
这种方法将会导致很严重的内存泄漏,肯定是不可行的。
我的疑问是,是否可以定义一个局部静态对象作为函数的返回值,一样通过引用返回,不是就高效的返回了一个类对象了么?
Matrix& operator+( const Matrix& m1, const Matrix& m2 )
{
static Matrix result = m1+m2;
return result;
}
静态局部对象的内存将会在程序完成后自动释放,请问这样有何不妥?
------解决方案--------------------
如果返回对象的值,会引发构造函数,如果对象很大的话成本就很高
所以一般是返回const引用或指针
------解决方案--------------------
不行的
这种情况怎么办?
Matrix m1, m2, m3, m4, m5;
m5 = (m1+m2)+(m3+m4);