我想在构造函数中调用一些代码
connect(self() , 0 , filter , 0);
connect(filter , 0 , self() , 0);
但是我有例外
抛出“ boost :: exception_detail :: clone_impl>”实例后终止调用
我下一步
my_filter::sptr
my_filter::make(unsigned int interpolation,
unsigned int decimation) {
auto ptr = gnuradio::get_initial_sptr(new my_filter
(interpolation, decimation));
ptr->wire();
return ptr;
}
和方法线
void my_filter::wire() {
connect(self(), 0, resampler, 0);
connect(resampler, 0, self(), 0);
}
但是我得到了错误
Terminate called after throwing an instance of 'std::invalid_argument'
what(): sptr_magic: invalid pointer!
what(): tr1::bad_weak_ptr
我该如何改善呢?
答案 0 :(得分:0)
Read when this exception is thrown:
std :: bad_weak_ptr是由异常抛出的对象的类型 std :: shared_ptr的构造函数,采用std :: weak_ptr作为 参数,当std :: weak_ptr引用一个已经删除的对象时。
很可能您的self()
只是在调用shared_from_this()
,并且没有shared_ptr
指向当前对象,因为您正在构建,所以shared_from_this()
必须抛出异常。
二次修复它使用模式两步初始化。
std::tr1::shared_ptr<YourCalsss> YourCalsss::Create() // static method
{
auto result = std::tr1::shared_ptr<YourCalsss>(new YourCalsss);
result->init(); // inside that you will do a connect
return result;
}
PS。我假设您将C ++ 03与tr1
一起使用,因为错误信息提供了此提示。