动态分配的对象内的动态分配

时间:2014-05-25 10:24:54

标签: c++ memory-management

在使用new分配的对象中使用“new”分配内存是否有任何影响。编译器,链接器,运行时性能或其他任何优点或缺点是什么?

我正在谈论的一个例子

class IntData
{
public:
    IntData()
    {
        IntVector = new std::vector<int>();
        //...
    }

protected:
    std::vector<int> *IntVector; //Would this be any different to static allocation if...
};

//...I know that all IntData objects will be dynamically allocated
IntData *object = new IntData();

1 个答案:

答案 0 :(得分:1)

使用

std::vector<int> IntVector;

您将自动存储提供给您的向量(即,如果在函数中它将位于堆栈空间,如果是类的成员,则取决于父级的方式对象在上面的示例中分配..:在堆上)

使用

IntVector = new std::vector<int>();

您在堆上完全分配对象,包括一些容器的内部数据(对象将始终在堆上复制)。

这值得吗?

对于一小部分字节:通常没有。此外,您必须通过致电delete自行进行记忆簿记。可能不是问题,但在上面的简单案例中,我认为没有理由这样做。


还与更一般的案例有关:STL containers on the stack and the heapObject creation on the stack/heap?