C++将类对象推送到容器时在堆栈或堆中创建类对象
C++ create class object in stack or heap when push it to container?
我已经阅读了这个SO问题,什么时候最好使用堆栈而不是堆,反之亦然?堆栈的大小似乎有限,因此您无法在堆栈中分配大型对象。
我有一些代码,可以将对象推送到容器,请参阅在线 ide 上的此链接,http://cpp.sh/9xxea
那么,我应该更喜欢一个而不是另一个吗?
void AddPerson(const CPerson& p)
{
std::cout << "push back" << std::endl;
persons.push_back(p);
std::cout << "size " << persons.size() << std::endl;
}
void AddPerson()
{
CPerson cp(10, "kit");
std::cout << "push back" << std::endl;
//I know push_back will copy the element and push the copied object(which is created on heap ?), when function returns, cp will be "freed".
//so this function is better than function AddPerson(const CPerson&) ?
persons.push_back(cp);
std::cout << "size " << persons.size() << std::endl;
}
std::vector<CPerson> persons;
那么,我应该更喜欢一个而不是另一个吗?
我建议根本不单独创建对象。既不堆叠,也不堆。将对象直接创建到向量中:
persons.emplace_back(10, "kit");
也就是说,CPerson
非常小,你可以在堆栈上容纳数十万个(或更少,在很大程度上取决于你的堆栈的大小(,所以我不会担心那个是否这样做。
相关文章:
- C++ 在堆栈中包含多态属性的类对象存储
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- C++ 对象数组堆栈溢出
- 作为指针注入类后重新创建堆栈对象不好吗?
- C++包装库:在堆栈上分配C++ C 中的对象
- 对象接收堆栈溢出异常 c++ 的排序向量
- C++析构函数调用两次,堆栈分配的复合对象
- 如何在构建对象堆栈时解决转换错误?
- 堆分配对象中的堆栈对象在 c++ 中在哪里分配?
- C++ - 面试问题中的堆栈上的对象
- 堆还是堆栈用于创建对象?
- C++自己的对象堆栈.在 push() 上复制了什么?
- C++,在对象内分配多个数据时,堆栈分配是否更有效? 在下面的程序中,类A_Heap的效率会更低吗?
- 对象向量是否在堆或堆栈上分配C++?
- 使用在堆栈上创建的对象调用虚拟函数
- 如果我使用malloc()而不是堆栈数组,OpenGL不会渲染对象
- 如何以编程方式区分在内存的堆和堆栈部分创建的对象
- 模板堆栈对象的数组;语法
- 小对象堆栈存储,严格混叠规则和未定义行为