C++ Can callback->InvokeAsync(“,FB::variant_list_of(shared_from_this())(result));抛出坏的\u弱的\u ptr异常?

C++ Can callback->InvokeAsync(“,FB::variant_list_of(shared_from_this())(result));抛出坏的\u弱的\u ptr异常?,c++,boost,firebreath,C++,Boost,Firebreath,我想知道是callback->InvokeAsync,FB::variant\u list\u来自这个结果中的共享\u;可以引发坏的\u弱\u ptr异常。基于和firebreath文档,callback是一个JSObjectPtr,它定义了一个别名,表示JSObject shared_ptr和shared_from_这是FB::JSAPI的一个方法,它将FB::JSAPIPtr返回到当前对象,还返回一个shared_指针。 我在npapi插件中使用了以下代码: void MyClassAPI:

我想知道是callback->InvokeAsync,FB::variant\u list\u来自这个结果中的共享\u;可以引发坏的\u弱\u ptr异常。基于和firebreath文档,callback是一个JSObjectPtr,它定义了一个别名,表示JSObject shared_ptr和shared_from_这是FB::JSAPI的一个方法,它将FB::JSAPIPtr返回到当前对象,还返回一个shared_指针。 我在npapi插件中使用了以下代码:

void MyClassAPI::MyFunction(const std::string& arg1,
                            const std::string& arg2,
                            const FB::JSObjectPtr & callback) try {

                            //some code here

                            callback->InvokeAsync("", FB::variant_list_of(shared_from_this())(result));

                            }catch(...){

                            //some code here

                            callback->InvokeAsync("", FB::variant_list_of(shared_from_this())(result));

                            }

当我在浏览器的选项卡中时,在抛出“boost::exception\u detail::clone\u impl”的实例后抛出一个:terminate调用,并在函数完成执行之前关闭它。我真的不明白这个异常是从哪里来的。

在从这个调用shared_之前,您的对象是否已经存储在某个shared_ptr中了?是的。抱歉,我没有提到只有当我在浏览器的选项卡中并在函数完成其执行之前关闭它时才会引发此异常谁拥有共享的\u ptr?您能否展示足够的代码来描述所有权是如何管理的?因为,从_启用_shared _这并不意味着在方法执行时对象会留在附近。通常,使用绑定到共享\u ptr的函子作为回调。看起来您试图避免这种情况,但这意味着没有人持有共享引用,至少代码中没有。我有一个基于Firebreath框架的npapi插件。插件初始化时,MyClass通过函数创建JSAPI对象:FB::JSAPIPtr MyClass::createJSAPI{FB::JSAPIPtr myshared_ptr=boost::make_sharedFB::ptr_castshared_from_this‌​, m_host;return myshared_ptr;}然后在MyClassAPI中我有MyInitialFunction,它创建了一个新线程以运行MyFunction: