相关疑难解决方法(0)

如何避免C++中的连续解除分配/分配?

请考虑以下代码:

class A
{
    B* b; // an A object owns a B object

    A() : b(NULL) { } // we don't know what b will be when constructing A

    void calledVeryOften(…)
    {
        if (b)
            delete b;

        b = new B(param1, param2, param3, param4);
    }
};
Run Code Online (Sandbox Code Playgroud)

我的目标:我需要最大限度地提高性能,在这种情况下,这意味着最大限度地减少内存分配量.

这里显而易见的事情是B* b;改为B b;.我看到这种方法存在两个问题:

  • 我需要b在构造函数中初始化.由于我不知道b将会是什么,这意味着我需要将虚拟值传递给B的构造函数.哪个,IMO,很难看.
  • calledVeryOften(),我将不得不做这样的事情:b = B(…),这有两个原因:
    • 析构函数b不会被调用.
    • 将构造B的临时实例,然后将其复制到b,然后将调用临时实例的析构函数.可以避免复制和析构函数调用.更糟糕的是,调用析构函数很可能导致不良行为.

那么我必须避免使用哪些解决方案new?请记住:

  • 我只能控制A.我无法控制B,而且我无法控制A的用户.
  • 我希望尽可能保持代码的清晰和可读性.

c++ oop optimization memory-management

13
推荐指数
3
解决办法
648
查看次数

标签 统计

c++ ×1

memory-management ×1

oop ×1

optimization ×1