可以这么说,动态分配作为参数

Dynamic allocation as a parameter, so to speak?

本文关键字:动态分配 参数      更新时间:2023-10-16

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

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

还是我必须这样做:

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

尽管您可能没有尝试过,但以下是对正在发生的事情的解释:

创建新的游标对象

时,它将返回一个新的游标对象。 当您使用 push_back 函数时,它会将对象推回向量上。 因此,当您在push_back内创建新对象时,它会计算该函数,该函数返回一个新游标,然后将其推回。

基本上,它都是关于返回值和评估的。

如果您按照所述执行此操作并且事后不清理它,您将泄漏内存。

更好的方法是使用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)));

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

std::vector<cursor> cursors;
cursors.push_back(4);  // or cursors.emplace_back(4);

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