在没有new的情况下在堆上创建对象

时间:2011-03-02 20:12:37

标签: c++ stl memory-management heap

在C ++中,是否可以在不使用newmalloc的情况下在堆上创建对象?

我认为如果我使用像vector这样的STL容器,它将被放在堆上。如果我这样做:

vector<Object> listObjs = vector<Object>();

Object x = Object(...);
...
listObjs.push_back(x);

此处创建的对象位于何处?

3 个答案:

答案 0 :(得分:7)

x表示的对象驻留在堆栈上。 vector::push_back会将其复制到堆中。

vector中的allocator对象可能会使用newmalloc来实现,但它可能会使用另一个低级API。例如,Unix和Windows都提供内存映射API,而后者又可用于实现mallocnew和分配器。

答案 1 :(得分:0)

std::vector正在那里new

答案 2 :(得分:0)

来自C#/ java?

std::vector<Object> listObjs;在堆栈上创建一个容器,用于管理堆上的Object数组

listObjs.push_back(Object());分配一个大小为+ 1的数组,将旧数组复制到新数组并将Object()分配给最后一个