在C ++中,是否可以在不使用new
或malloc
的情况下在堆上创建对象?
我认为如果我使用像vector
这样的STL容器,它将被放在堆上。如果我这样做:
vector<Object> listObjs = vector<Object>();
Object x = Object(...);
...
listObjs.push_back(x);
此处创建的对象位于何处?
答案 0 :(得分:7)
x
表示的对象驻留在堆栈上。 vector::push_back
会将其复制到堆中。
vector
中的allocator对象可能会使用new
或malloc
来实现,但它可能会使用另一个低级API。例如,Unix和Windows都提供内存映射API,而后者又可用于实现malloc
,new
和分配器。
答案 1 :(得分:0)
std::vector
正在那里new
。
答案 2 :(得分:0)
来自C#/ java?
std::vector<Object> listObjs;
在堆栈上创建一个容器,用于管理堆上的Object数组
listObjs.push_back(Object());
分配一个大小为+ 1的数组,将旧数组复制到新数组并将Object()分配给最后一个