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也会导致一些无畏的析构与构造。

上一篇 下一篇

猜你喜欢

热点阅读