enable_from_this 的使用與實現原理說明:
shared_from_this()是enable_shared_from_this的成員函式,返回shared_ptr;
注意的是,這個函式僅在shared_ptr的建構函式被呼叫之後才能使用。
原因是enable_shared_from_this::weak_ptr並不在建構函式中設定,而是在shared_ptr的建構函式中設定。
使用場合:當前類a的例項物件正被share_ptr管理,且在類a的成員函式裡需要把當前類物件作為引數傳給其他函式時,就需要傳遞乙個指向此類a的例項物件自身的share_ptr。
錯誤的使用**一:
#include
#include
#include
using namespace std
;class d:
public boost:
:enable_shared_from_this
};int main(
)
程式編譯通過,執行結果如下:
d::d()
terminate called after throwing an instance of 'boost::exception_detail::clone_impl >'
what(): tr1::bad_weak_ptr
aborted
說明在d的建構函式中呼叫shared_from_this(), 此時d的例項本身尚未構造成功,weak_ptr也就尚未設定,所以程式丟擲tr1::bad_weak_ptr異常。
錯誤的使用**二:
#include
#include
#include
using namespace std
;class d:
public boost:
:enable_shared_from_this
void func(
)
};int main(
)
程式編譯通過,執行結果如下:
d::d()
d::func()
terminate called after throwing an instance of 'boost::exception_detail::clone_impl >'
what(): tr1::bad_weak_ptr
aborted
失敗原因分析:
在主函式main中,d的例項是在棧上構造,沒有使用boost::shared_ptr 的構造方式,
所以boost::enable_shared_from_this中的weak_ptr所指的函式物件也就沒有被賦值,
在呼叫d.func()中使用shared_from_this()函式時
----注:shared_from_this的函式實現 ------
shared_ptr shared_from_this()
----注:shared_from_this的函式實現 ------
呼叫boost_assert( p.get() == this ); 失敗,丟擲以上異常。
最後,我們給出share_from_this()的正確使用例子:
#include
#include
#include
using namespace std
;class d:
public boost:
:enable_shared_from_this
void func(
)
};int main(
)
執行結果:
d::d()
d::func()
enable from this方法的使用與陷阱
enable from this 的使用與實現原理說明 shared from this 是enable shared from this的成員函式,返回shared ptr 注意的是,這個函式僅在shared ptr的建構函式被呼叫之後才能使用。原因是enable shared from this...
關於springCloud中服務方呼叫方的配置
1.我方是服務方,別人呼叫我方,由我方提供位址,不需要呼叫feign。那麼,位址資訊在resourceconfig裡面做配置,resourceconfig中配置的位址相當於是把請求位址暴露給對方,並在此位址請求時對他放行。configuration enableresourceserver publ...
Container DataItem幾種方式
在繫結資料時經常會用到這個句程式 databinder.eval container.dataitem,x 或者 databinder.eval container,dataitem.x 今天又學到一種,而且微軟也說這種方法的效率要比以上兩種高。datarowview container.datai...