假设我们有一个 Cursor 对象指针向量。游标对象是使用单个 int 参数构造的。那么这种语法会起作用吗?
vector<cursor*> cursors;
cursors.push_back(new cursor(4));
还是我必须这样做:
cursor* tempCursor = new cursor(4);
cursors.push_back(tempCursor);
如果您按照您的说明执行此操作并且之后不清理它,您将泄漏内存。
更好的方法是使用 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)));
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.
它会起作用,但很有可能你最好做点别的事情。如果没有很好的理由不这样做,我会考虑将其设为游标向量(而不是指向游标的指针)。在这种情况下,您可以执行以下操作:
std::vector<cursor> cursors;
cursors.push_back(4); // or cursors.emplace_back(4);
这通常通过自动化内存管理来提高程序员的效率,并通过消除不必要的间接级别来提高代码效率。