-1

假设我们有一个 Cursor 对象指针向量。游标对象是使用单个 int 参数构造的。那么这种语法会起作用吗?

vector<cursor*> cursors;
cursors.push_back(new cursor(4));

还是我必须这样做:

cursor* tempCursor = new cursor(4);
cursors.push_back(tempCursor);
4

3 回答 3

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)));
于 2012-06-07T15:01:14.843 回答
1

Despite the fact that you may not have tried this here's an explanation of what's going on:

when you create a new cursor object it returns a new cursor object. When you use a push_back function it pushes an object back on a vector. So, when you create a new object inside the push_back it evaluates that function which returns a new cursor which then gets pushed back.

Basically its all about return values and evaluations.

于 2012-06-07T15:02:22.167 回答
0

它会起作用,但很有可能你最好做点别的事情。如果没有很好的理由不这样做,我会考虑将其设为游标向量(而不是指向游标的指针)。在这种情况下,您可以执行以下操作:

std::vector<cursor> cursors;

cursors.push_back(4);  // or cursors.emplace_back(4);

这通常通过自动化内存管理来提高程序员的效率,并通过消除不必要的间接级别来提高代码效率。

于 2012-06-07T15:25:12.450 回答