はい、通常は安全です。 (マキシム・イェゴルシュキンの投げエッジのケースに関する観察に同意)
以下のタイプミスメッセージに注意してください
Boost は逆参照と->
演算子を次のように定義します。
template<class T>
typename boost::detail::sp_dereference< T >::type boost::shared_ptr< T >::operator* () const;
template<class T>
typename boost::detail::sp_member_access< T >::type boost::shared_ptr< T >::operator-> () const;
これらのdetail
ビットが解決されると、これが得られます
template<class T>
T & boost::shared_ptr< T >::operator* () const
template<class T>
T * boost::shared_ptr< T >::operator-> () const
したがって、ポイント先のオブジェクトを直接扱っています。あなたが試みていることを妨げる可能性のあるプロキシやその他の構成要素はありません。
指摘されたデータが関係しているため、コードは次のようになります。
bigDataPtr->~BigDataPtr();
new (&*bigDataPtr) BigData;
タイプミスがあるかもしれません。ただし、意図した場合:
bigDataPtr->~BigData();
new (&*bigDataPtr) BigData;
に解決されます
(BigData pointer)->~BigData();
new (&(BigData reference)) BigData;
これは合法であり、割り当てで通常発生する追加の割り当てを回避できることは正しいです。