如何访问std :: shared_ptr的内容?

用户名

这是我的代码。

std::shared_ptr<WSUStudent> WSUStudent::registerStudent(
   std::string lastName,
   std::string firstName
)
{
   auto result = std::shared_ptr<WSUStudent>(new WSUStudent(lastName, firstName));

   s_allStudents.insert(&result);

   return result;
}

我已经成功地更改了功能,因此它返回了shared_ptr而不是普通的指针。根据分配(我认为),我已经成功地使用共享指针封装了“ new”语句,但是如果没有&,则“ auto”下面的代码行将不起作用,而与&一起将无法工作。我收到一条错误消息,指出没有匹配的函数调用(带或不带&)。该行代码试图将新学生(或指向新学生的指针?)插入所有学生的列表中。但是,“插入”方法并未在本地被覆盖,因此我不太确定该怎么做。错误打印在下面。

/mnt/hgfs/Data Structures and Algorithms/HW04/WSUStudent.cpp:146:32: error: no matching function for call to ‘std::set<WSUStudent*>::insert(std::shared_ptr<WSUStudent>*)’
    s_allStudents.insert(&result);

这种分配的目的是通过将普通指针变为弱指针和共享指针来修复内存泄漏(不会被其指针删除的“新”语句)。原始代码如下。

WSUStudent *WSUStudent::registerStudent(
   std::string lastName,
   std::string firstName
)
{
   auto result = new WSUStudent(lastName, firstName);

   s_allStudents.insert(result);

   return result;
}

我要解决这个错误吗?我无法运行s_allStudents行。

萨胡

根据的类型s_allStudents,您可以使用:

s_allStudents.insert(result.get());

但是,更好的选择是更改的类型s_allStudents

static std::set<std::shared_ptr<WSUStudent>> s_allStudents;

并使用:

s_allStudents.insert(result);

更新

默认operator<()shared_ptr是这样的,在对象s_allStudents将指针的值进行排序。如果要使用其他条件对对象进行排序,则需要定义一个自定义函子/函数作为模板的参数。

struct MyCompare
{
   bool operator<(shared_ptr<WSUStudent> const& lhs,
                  shared_ptr<WSUStudent> const& rhs) const
   {
      // Implement the logic ...
   }
};

并将其用作:

static std::set<std::shared_ptr<WSUStudent>, MyCompare> s_allStudents;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

访问shared_ptr的数组

来自分类Dev

QVariant与std :: shared_ptr

来自分类Dev

QVariant与std :: shared_ptr

来自分类Dev

QList中的std :: shared_ptr不会在删除时删除内容

来自分类Dev

std :: shared_ptr并发访问健全性检查

来自分类Dev

使用std :: move与std :: shared_ptr

来自分类Dev

如何在GDB中访问std :: tr1 :: shared_ptr的目标

来自分类Dev

如何在boost :: object_pool中使用boost :: shared_ptr / std :: shared_ptr?

来自分类Dev

如何在boost :: object_pool中使用boost :: shared_ptr / std :: shared_ptr?

来自分类Dev

std :: shared_ptr和继承

来自分类Dev

std :: shared_ptr深层复制对象

来自分类Dev

std :: function和shared_ptr

来自分类Dev

使用* this作为std :: shared_ptr

来自分类Dev

数据与memcpy的std :: shared_ptr分配

来自分类Dev

std :: shared_ptr预分配内存

来自分类Dev

std set of boost :: shared_ptr <string>

来自分类Dev

可重用的std :: shared_ptr

来自分类Dev

std :: shared_ptr深层复制对象

来自分类Dev

数据与memcpy的std :: shared_ptr分配

来自分类Dev

使用* this作为std :: shared_ptr

来自分类Dev

std :: shared_ptr初始化

来自分类Dev

std :: shared_ptr删除者类型

来自分类Dev

移动 std::shared_ptr 的函数声明

来自分类Dev

禁用 std::shared_ptr 的清理

来自分类Dev

shared_ptr <T>如何访问T的元素或函数

来自分类Dev

如何使用std :: shared_ptr实现多态?

来自分类Dev

std :: shared_ptr循环依赖如何导致问题

来自分类Dev

如何将std :: shared_ptr用作类成员?

来自分类Dev

SWIG:如何从 SwigPyobject 获取包装的 std::shared_ptr 的值