gpt4 book ai didi

c++ - std::vector push_back(Object()) 和 push_back(new Object()) 的区别?

转载 作者:可可西里 更新时间:2023-11-01 18:10:57 25 4
gpt4 key购买 nike

在我当前的代码中,我想将新的 DrawObjects 插入到我创建的 vector 中,

std::vector< DrawObject > 对象;

有什么区别:

objects.push_back(DrawObject(name, surfaceFile, xPos, yPos, willMoveVar, animationNumber));

objects.push_back(new DrawObject(name, surfaceFile, xPos, yPos, willMoveVar, animationNumber));

最佳答案

第一个添加非指针对象,而第二个添加指针到 vector 。所以这完全取决于 vector 的声明,你应该做什么。

在你的情况下,因为你已经声明了 objects作为std::vector<DrawObject> , 所以第一个会起作用,如 objects可以存储 DrawObject 类型的项目, 不是 DrawObject* .

在 C++11 中,您可以使用 emplace_back作为:

objects.emplace_back(name, surfaceFile, xPos, yPos, 
willMoveVar, animationNumber);

注意区别。比较它:

objects.push_back(DrawObject(name, surfaceFile, xPos, yPos, 
willMoveVar, animationNumber));

emplace_back ,您不在调用点构造对象,而是将参数传递给 vector,然后 vector 在内部就地构造对象。在某些情况下,这可能会更快。

阅读关于 emplace_back 的文档其中说(强调我的),

Appends a new element to the end of the container. The element is constructed in-place, i.e. no copy or move operations are performed. The constructor of the element is called with exactly the same arguments that are supplied to the function.

由于它避免了复制移动,因此生成的代码可能会更快一些。

关于c++ - std::vector push_back(Object()) 和 push_back(new Object()) 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14175607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com