C++优化:不要提前声明对象
2020-04-11 本文已影响0人
fck_13
我们先看一个简单的例子:
#include <iostream>
#include <exception>
class complicatedClass {
public:
complicatedClass() {
//do a lot of things
}
~complicatedClass() {
//do a lot of things
}
//many other member functions
private:
//many data member
//......
};
complicatedClass func() noexcept(false){
complicatedClass complicatedObject;
try {
//do something
}
catch (...) {
throw std::exception();
}
return complicatedObject;
}
int main()
{
func();
return 0;
}
假设,我们有一个很复杂的类complicatedClass
,这里的复杂指的是构造成本和内存成本都比较大。可能要初始化的对象比较多,也可能要分配的内存比较多。我们还有一个函数,这个函数会返回complicatedClass
的对象,还会抛出异常。因为某种原因,出发了这个异常,会导致complicatedObject
的构造函数和析构函数的执行,但是它本身却没有其他的处理。
所以,我们要在离使用对象最近的地方来声明对象,这样才会避免这种情况。
早期的C语言要求就变量都声明在函数一开始时候,但是,在C++中,最好不要这么做,而且现在的C也不强制这么做了。
不光是抛出异常会导致这种情况的发生,有可能return
也会导致一些无畏的析构与构造。