【问题标题】:Boost shared pointer initialization提升共享指针初始化
【发布时间】:2013-01-10 14:06:19
【问题描述】:

我是 C++ 的初学者。我有以下问题。在我定义的 MevisPatientModel 类中:

typedef boost::shared_ptr<egMevisPatientModel> Ptr_t;

然后我“定义”了变量:

egMevisPatientModel::Ptr_t v_PatientModel;

现在当我尝试访问 MevisPatientModel 类的 getType 函数时:

v_PatientModel->getType()

...我收到以下消息:

断言失败! ...shared_ptr.hpp 表达式 px!= 0

我的意图是指针没有被初始化。现在我知道这里有很多“适合”我的问题的答案。但正如我所说,我是初学者。老实说,我不明白这些答案。请帮助我,并为我的问题给出明确而具体的答案。非常感谢。

你好,马可

【问题讨论】:

  • "我的意图是指针没有被初始化。" - 你这是什么意思?你的意思是你希望它是“NULL”还是你的意思是你希望指针中有一个有效的对象?
  • 您已经定义了指向任何内容的指针变量。您还必须定义对象并使指针指向对象

标签: c++ pointers shared


【解决方案1】:

您需要使用new 创建一个动态对象,并将生成的指针分配给shared_ptr

egMevisPatientModel::Ptr_t v_PatientModel(
    std::make_shared<egMevisPatientModel>());

【讨论】:

  • 推荐使用make_shared egMevisPatientModel::Ptr_t v_PatientModel = make_shared&lt;egMevisPatientModel&gt;()
  • 从技术上讲,它不需要是堆分配的对象。您也可以使用指向自动对象的指针和“无操作”删除器。
  • @pmr:在那种情况下,使用shared_ptr 有什么意义?
  • 有时只是为了使用一些奇怪的 API 或管理内存以外的资源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
  • 2011-06-10
  • 1970-01-01
  • 2015-10-09
  • 2012-10-19
  • 2021-07-03
  • 1970-01-01
相关资源
最近更新 更多