std::unique_ptrが好きです。これは、メモリリークを防ぐのに役立ちます。これは非常に便利です。ただし、1つの問題があります。それは、コピーの割り当てと構築が許可されていないことです。
この制限はプログラマーの安全に役立ちますが、それもかなり制限されています。コピーの割り当てと構築を使用して、std :: unique_ptrをメンバーとして持つクラスを操作する場合、問題が発生することになります。そのため、コピーの作成と割り当てを使用して、unique_ptrの周りに独自のラッパーを作成しました。これがコピーコンストラクタです:
template<typename T, class Deleter>
PointerSmartSafe<T, Deleter>::PointerSmartSafe(PointerSmartSafe const& pointer_smart_safe_) noexcept : _m_opPointerUnique((_m_opPointerUnique == nullptr) ? new T(*_m_opPointerUnique.get()) : nullptr){
}
そして、これがコピー代入演算子です:
template<typename T, class Deleter>
PointerSmartSafe<T, Deleter>& PointerSmartSafe<T, Deleter>::operator=(PointerSmartSafe const& pointer_smart_safe_) noexcept{
_m_opPointerUnique = decltype(_m_opPointerUnique)(new T(*_m_opPointerUnique.get()));
return *this;
}
タイプ(T)として抽象基本クラスを使用することになったまで、すべてが正常に機能しました。次のようなエラーメッセージが表示されました。
error: cannot allocate an object of abstract type 'AbstractBaseClass'
これは私を困惑させます。回避策はありますか?