假设我们有一个Cursor对象指针的向量。使用单个int参数构造游标对象。那么这种语法会起作用吗?
vector<cursor*> cursors;
cursors.push_back(new cursor(4));
或者我必须这样做:
cursor* tempCursor = new cursor(4);
cursors.push_back(tempCursor);
答案 0 :(得分:1)
如果你这样做,你将会泄漏内存,并且之后不要清理它。
更好的方法是使用shared_ptr。
代码看起来像这样
cursors.push_back(std::make_shared<cursor>(4));
虽然有点难以理解你想要完成的事情。
如@ cat-plus-plus的评论中所述,除非您明确希望在其他地方共享对象,否则应使用unique_ptr,然后代码如下所示:
cursors.push_back(std::unique_ptr<cursor>(new cursor(4)));
答案 1 :(得分:1)
尽管你可能没有尝试过这个,但这是对正在发生的事情的解释:
创建新的游标对象时,它返回一个新的游标对象。当您使用push_back函数时,它会将对象推回向量。因此,当你在push_back中创建一个新对象时,它会评估该函数,该函数返回一个新的游标然后被推回。
基本上都是关于返回值和评估。
答案 2 :(得分:0)
它会起作用,但你做其他事情的好处是很好的。没有一个非常好的理由不这样做,我会考虑将它作为游标的矢量(而不是指向游标的指针)。在这种情况下,您可以执行以下操作:
std::vector<cursor> cursors;
cursors.push_back(4); // or cursors.emplace_back(4);
这通常可以通过自动化内存管理来提高程序员的效率,并通过消除不必要的间接级别来提高代码效率。