破棄されるとdeleteを呼び出すスコープポインタークラスを書き込もうとしています。ポインタが配列を指しているかどうかを確認する必要があることに気付いたので、正しい削除を呼び出すことができました。std :: unique_ptrからインスピレーションを得て、type_traitsを使用して、型ポインターを保持するテンプレート引数が配列であるかどうかを確認しました。
template <typename type, bool _Dx = std::is_array<type>::value>
class scoped_ptr {
private:
type* m_ptr;
//...
};
template <typename type>
class scoped_ptr<type, true> {};
しかし、テンプレートの引数の型が「int []」の場合、「int [] * m_ptr」を使用できないため、コードが無効になります。この問題を解決するにはどうすればよいですか。int []引数を渡して、「int * m_ptr」を使用するにはどうすればよいですか。
あなたが欲しいのはstd::remove_extent
です。配列を指定すると要素タイプが指定され、それ以外の場合は指定したタイプが指定されます。それは次のようになります
template <typename type, bool _Dx = std::is_array<type>::value>
class scoped_ptr {
private:
std::remove_extent_t<type>* m_ptr;
//...
};
また、それ_Dx
は違法な名前であることに注意してください。アンダースコアで始まり、大文字が続くすべての名前は、実装用に予約されています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加