关于类的返回~解决办法
关于类的返回~~~
比如一个类为class A,其中有个成员函数为A GetOther();
请问在GetOther()
{
A a(0);
return a;
}
与
{
return A(0);
}
有什么不同~~~????
在使用上,的确有过不同,但是就是找不到原因... 请指教...
------解决方案--------------------
前者的过程:
1.对象a被创建,同时完成初始化
2.调用拷贝构造函数把a拷贝到保存返回值的外部存储单元中
3.a在函数结束时被销毁(调用析构函数)
后者的过程:
直接把临时对象创建并初始化在外部存储单元中,省去了拷贝和析构.
显然后者比前者效率要高
------解决方案--------------------
所谓的内存泄漏是指如果在“程序执行结束之前”因为动态创建而申请得到的内存块的地址上在程序中丢失了(就是在程序中没有任何一个指针保存了该内存块的地址),就被认为是内存泄漏。
并不是说如果有new而没有delete就是内存泄漏,只要在程序中还有指针指向申请的该内存块就不叫内存泄漏。
比如一个类为class A,其中有个成员函数为A GetOther();
请问在GetOther()
{
A a(0);
return a;
}
与
{
return A(0);
}
有什么不同~~~????
在使用上,的确有过不同,但是就是找不到原因... 请指教...
------解决方案--------------------
前者的过程:
1.对象a被创建,同时完成初始化
2.调用拷贝构造函数把a拷贝到保存返回值的外部存储单元中
3.a在函数结束时被销毁(调用析构函数)
后者的过程:
直接把临时对象创建并初始化在外部存储单元中,省去了拷贝和析构.
显然后者比前者效率要高
------解决方案--------------------
所谓的内存泄漏是指如果在“程序执行结束之前”因为动态创建而申请得到的内存块的地址上在程序中丢失了(就是在程序中没有任何一个指针保存了该内存块的地址),就被认为是内存泄漏。
并不是说如果有new而没有delete就是内存泄漏,只要在程序中还有指针指向申请的该内存块就不叫内存泄漏。