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

Dynamic allocation inside a dynamically allocated object

本文关键字:动态分配 对象 内部      更新时间:2023-10-16

在对象内部使用'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();

使用

std::vector<int> IntVector;

你给自动存储到你的向量(即,如果在一个函数中,它将在堆栈空间,在一个类的成员的情况下,它取决于父对象是如何分配的。在上面的例子中:在堆上)

使用

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

你在堆上完全分配了对象,包括一些容器的内部数据(对象总是在堆上复制)。

这值得吗?

对于一小部分字节:通常没有。此外,你必须通过调用delete来自己做内存记录。可能不是问题,但在上面的简单案例中,我认为没有理由这样做。


也与更一般的情况有关:堆栈和堆上的STL容器在堆栈/堆上创建对象?