不使用new在堆上创建对象
在 C++ 中,是否可以在不使用 new 或 malloc 的情况下在堆上创建对象?
我认为如果我使用像 vector
这样的 STL 容器,它将被放在堆上。如果我这样做:
vector<Object> listObjs = vector<Object>();
Object x = Object(...);
...
listObjs.push_back(x);
此处创建的对象驻留在哪里?
In C++, is it possible to create an object on the heap without using new
or malloc
?
I think if I use an STL container like a vector
it will be put on the heap. If I do:
vector<Object> listObjs = vector<Object>();
Object x = Object(...);
...
listObjs.push_back(x);
Where do the Objects created here reside?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
x
表示的对象驻留在堆栈上。vector::push_back
会将其复制到堆中。向量
内的分配器对象可能会使用new
或malloc
来实现,尽管它也可能使用其他低级 API。例如,Unix 和 Windows 都提供内存映射 API,这些 API 又可用于实现 malloc、new 和分配器。The object denoted by
x
resides on the stack.vector::push_back
will copy it to the heap.The allocator object inside the
vector
will probably be implemented usingnew
ormalloc
, although it is possible that it uses another, low-level API. For instance, both Unix and Windows offer memory mapping APIs, which in turn may be used to implementmalloc
,new
and allocators.std::vector
正在那里做new
。std::vector
is doingnew
there.来自 C#/java ?
std::vector<对象> listObjs;
在栈上创建一个容器,管理一个 Object 数组在堆上分配listObjs.push_back(Object());
分配一个大小 + 1 的数组,复制旧数组到新的并将 Object() 分配给最后一个Coming from C#/java ?
std::vector<Object> listObjs;
create a container on the stack that manage an array of Object allocate on the heaplistObjs.push_back(Object());
allocate an array of size + 1, copy the old array to the new one and assign Object() to the last one