【问题标题】:using a shared_ptr object in constructor works but not in destructor [closed]在构造函数中使用 shared_ptr 对象有效,但在析构函数中无效[关闭]
【发布时间】:2021-12-08 09:23:54
【问题描述】:

我有一个类的构造是这样的:

class CLSS
{
public:
    CLSS(const std::shared_ptr<someType>& pobj) 
    {
    std::shared_ptr<someType> obj = pobj;
    obj->somefunc("DDDD")
    }
    ~CLSS()
    {
    }
};

适用于现在的问题。但是,当我将obj-&gt;info("DDDD")的相同函数放在双构造函数中时,它会返回错误,即:

    ...
    ~CLSS()
    {
      obj->info("DDDD")
    }
    ....

---------------编辑

我试过了

class CLSS
{
public:
    std::shared_ptr<someType> obj;

    CLSS(const std::shared_ptr<someType>& pobj) 
    {
    obj = pobj;
    obj->somefunc("DDDD")
    }
    ~CLSS()
    {
    }
};

但仍然无法编译,错误不是很可读。

【问题讨论】:

  • 你在哪里定义共享指针?
  • @AnisBelaid 没有'std::shared_ptr obj = pobj; ' 已经清除了吗?
  • 什么错误信息?阅读和思考以理解它会有所帮助。
  • 你错过了;
  • 即使错误对您来说不是很容易阅读,但对于试图回答您问题的人来说,它们可能更容易理解。请编辑您的问题以包含其实际文本。

标签: c++ pointers shared-ptr


【解决方案1】:

obj 是构造函数中的局部变量。它在构造函数结束时被销毁。 您需要将其声明为您的类的成员。

【讨论】:

  • 我试过这个声明'std::shared_ptr<:logger> log;'在构造函数之外,但它仍然没有修复它。
  • 我用我写的东西编辑了这个问题
猜你喜欢
  • 2018-12-09
  • 1970-01-01
  • 2013-08-26
  • 2018-03-18
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多