美文网首页
C++优化:不要提前声明对象

C++优化:不要提前声明对象

作者: fck_13 | 来源:发表于2020-04-11 19:05 被阅读0次

我们先看一个简单的例子:

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

相关文章

  • C++优化:不要提前声明对象

    我们先看一个简单的例子: 假设,我们有一个很复杂的类complicatedClass,这里的复杂指的是构造成本和内...

  • 声明提前

    var a=1; function test() { console.log(a)//function a(b...

  • 声明提前

    javascript函数在执行时会将声明提前到函数执行的位置,但不会对变量赋值,直到执行到声明变量并赋值的语句才会...

  • 提前声明

    最近面试备受打击,明明做了这么久的开发,缺因为不明白太多的基础理论知识受尽歧视。看来真的是到了需要总结的时候...

  • C++? VS2017?

    一、C++ 1.什么是C++语言? C++是对C语言的优化,采用面向对象的编程思想。是一种静态的编译型语言,即...

  • Unreal 事件

    事件 可 实现 C++与蓝图之间的通信C++触发蓝图监听 事件的声明 事件1和事件2类似于两个对象 例如标识符声明...

  • Lua脚本中实现Class机制

    纯lua脚本实现c++中的类的概念机制,后面空了把lua和c++的交互,lua中直接声明和使用c++中定义的对象补...

  • js中( function(){…} )()和( functio

    提前知识:声明提前,变量声明提前,函数声明提前,声明提前的先后顺序[https://www.cnblogs.com...

  • C++类、对象

    一、类 类(Class)则是C++面向对象编程的实现方式。class是C++关键字,也是用于类声明的关键字。紧接c...

  • 和GUI有关的各种对象

    在Windows中有各种GUI对象(不要和C++对象混淆),当你在进行绘图就需要利用这些对象。而各种对象都拥有各种...

网友评论

      本文标题:C++优化:不要提前声明对象

      本文链接:https://www.haomeiwen.com/subject/ucbumhtx.html