可以这么说,动态分配作为参数
Dynamic allocation as a parameter, so to speak?
假设我们有一个游标对象指针的向量。游标对象是使用单个 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);
这通常通过自动化内存管理来提高程序员的效率,并通过消除不必要的间接级别来提高代码效率。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 在c++中使用动态分配的问题
- 使用递归模板动态分配的多维数组
- 对具有动态分配的内存和析构函数的类对象的引用
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 访问动态分配列表中的元素
- 为什么 std::equal_to会导致动态分配?
- 调用析构函数以释放动态分配的内存
- 如果您为类的一个对象动态分配内存作为参数,会发生什么
- 将数组动态分配到具有指针参数的函数中
- 如何使用每个对象的单个构造函数参数动态分配C++对象数组?
- 如何使用一些参数初始化动态分配的数组中的对象
- 可以这么说,动态分配作为参数
- Qt中的2D游戏:初始化怪物并将动态分配的数组作为指针参数传递
- 如何删除动态分配的参数
- c++:在构造函数调用中作为参数创建的动态分配对象会发生什么?
- 如何使用参数化构造函数动态分配对象数组
- Qt信号:将动态分配参数的所有权传递给插槽
- 从动态分配的解引用指针默认初始化非const引用函数参数是否会造成内存泄漏?