在使用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();
答案 0 :(得分:1)
使用
std::vector<int> IntVector;
您将自动存储提供给您的向量(即,如果在函数中它将位于堆栈空间,如果是类的成员,则取决于父级的方式对象在上面的示例中分配..:在堆上)
使用
IntVector = new std::vector<int>();
您在堆上完全分配对象,包括一些容器的内部数据(对象将始终在堆上复制)。
这值得吗?
对于一小部分字节:通常没有。此外,您必须通过致电delete
自行进行记忆簿记。可能不是问题,但在上面的简单案例中,我认为没有理由这样做。
还与更一般的案例有关:STL containers on the stack and the heap 和Object creation on the stack/heap?