- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
想象一下下面的情况:
class IAlarm : public boost::enable_shared_from_this<IAlarm> {
boost::shared_ptr<IAlarm> getThisPointerForIAlarm() {
return shared_from_this();
}
void verifyThis(int); // called by Device
};
class Alarm : public IAlarm {
Alarm( boost::shared_ptr< Device > attachedDevice){
attachedDevice->attachAlarm(this->getThisPointerForIAlarm());
}
void sendAlarm(){
attachedDevice->Alarm();
}
};
class Device {
attachAlarm( boost::shared_ptr< IAlarm > ia){
this->alarm=ia;
}
};
我想将警报附加到设备。 Alarm 和 Device 不允许相互了解(这最终会导致循环依赖)。所以这就是我使用接口(interface)类 IAlarm 的原因。最后,我希望能够将多个警报附加到一台设备上。警报可以访问它们所连接的设备,并且设备可以开始验证连接的警报
一切都编译得很好。但是,如果我尝试将警报附加到设备,我会得到以下信息:
boost::shared_ptr<Device> ptrDevice(new Device());
boost::shared_ptr<IAlarm> ptrAlarm(new Alarm( ptrDevice ));
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_weak_ptr> >'
what(): tr1::bad_weak_ptr
究竟是什么问题?在将 boost::shared_ptr
与引用和纯指针一起使用之前,此设置或多或少地起作用了。是否可以使用 boost:shared_ptr
来完成这项工作?
最佳答案
对 shared_from_this()
的调用只有在 shared_ptr
拥有的动态分配对象上调用时才有效(参见要求 listed in the docs )。这意味着必须存在一个拥有该对象的 shared_ptr
,否则 shared_from_this()
将不起作用。
特别是这意味着您不能(成功地)在构造函数中调用 shared_from_this()
,因为该对象刚刚被构造并且还不属于任何 shared_ptr
实例。
要解决它,您最好将附加警报的代码从构造函数移到一个单独的方法,该方法在对象完全构造后调用:
boost::shared_ptr<Alarm> a(new Alarm());
a->attach(attachedDevice);
关于c++ - 在继承层次结构中使用 boost::shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1411279/
我正在尝试将多个水平链接的 Button 和 TextView 垂直链接为 View 集,但仍保持平面 View 层次结构。这是我的初始布局和代码:
到目前为止,我已经在Google BigQuery上训练了几种模型,目前我需要查看模型的外观(即架构,损失函数等)。 有没有办法获取这些信息? 最佳答案 仔细阅读文档后,我可以说该功能尚不存在。我什至
本文实例讲述了PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)。分享给大家供大家参考,具体如下: 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个
我是一名优秀的程序员,十分优秀!