gnuradio c ++ connect self()抛出bad_weak_ptr

时间:2018-09-20 09:21:25

标签: c++ gnuradio

我想在构造函数中调用一些代码

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

我该如何改善呢?

1 个答案:

答案 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一起使用,因为错误信息提供了此提示。