异常:bad_weak_ptr同时共享from_this
exception: bad_weak_ptr while shared_from_this
当我这样做时,我得到异常:std::bad_weak_ptr->shared_from_his()
template<typename TChar>
class painter_record_t
{
.......
private:
std::shared_ptr<i_painter_t> _owner;
}
在这里,我想在构造函数中设置"问题"对象:
template<typename TChar>
class stream_record_t : public painter_record_t<TChar>
{
public:
stream_record_t(std::shared_ptr<i_painter_t> owner) : painter_record_t(owner)
{
//...
}
}
我有基本类:
class i_painter_t
{
public:
virtual std::unique_ptr<painter_record_t<char>> get_entry() = 0;
}
和派生类,我想在其中向基本抽象类发送智能指针,但得到一个异常:
class painter_t : public i_painter_t, public std::enable_shared_from_this<painter_t>
{
public:
std::unique_ptr<painter_record_t<char>> get_entry()
{
return std::unique_ptr<painter_record_t<char>>(new stream_record_t<char>(static_cast< std::shared_ptr<i_painter_t> >(this->shared_from_this())));
}
}
我也尝试过这个,但有同样的问题:
class painter_t : public i_painter_t, public std::enable_shared_from_this<painter_t>
{
public:
std::unique_ptr<painter_record_t<char>> get_entry()
{
return std::unique_ptr<painter_record_t<char>>(new stream_record_t<char>(this->shared_from_this()));
}
}
为了使enable_shared_from_this
工作,您需要在调用shared_from_this()
之前将指向this
的指针存储在std::shared_ptr
中。
请注意,在对对象t调用shared_from_this之前,必须有一个拥有t的std::shared_ptr。
您可能希望使painter_t
构造函数私有化,并公开一个工厂方法,以确保创建的每个painter_t
都由shared_ptr
:管理
class painter_t : public i_painter_t, public std::enable_shared_from_this<painter_t>
{
public:
static std::shared_ptr<painter_t> create() { return std::make_shared<painter_t>(); }
}
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 在cuda线程之间共享大量常量数据
- 如何从具有移动语义的类对象中生成共享指针
- 在c代码之间共享数据的最佳方式
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 将静态库链接到不带-fPIC的共享库中
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 无法在Ubuntu上将共享库与Eclipse链接
- 从python调用openMP共享库时,未定义opnMP函数
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 为什么我的共享库中存在展开符号
- 使用共享指针的函数调用,其对象应为 const
- 具有两个独占锁组的共享锁
- 共享队列的线程安全
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 多个"常量引用"变量可以共享同一个内存吗?
- 如何访问由共享指针保存的类方法?