请考虑以下代码:
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,然后将调用临时实例的析构函数.可以避免复制和析构函数调用.更糟糕的是,调用析构函数很可能导致不良行为.那么我必须避免使用哪些解决方案new?请记住: