は、次のような単純なコンテナ、他の方法を記述したり、それがあるとして、それは完全に賢明です:このコンテナ実装は完全に賢明ですか?
template <typename T, bool small_>
struct TransType
{
typedef const T& param_type;
};
template <typename T>
struct TransType<T, true>
{
typedef const T param_type;
};
template <class T>
class Container:public TransType<T,sizeof(T)<=sizeof(void*)> {
public:
param_type getVal(){
return obj;
}
void setVal(param_type input){
containment=input;
}
private:
T containment;
};
テンプレート void UB(){TransType * x =新しいコンテナ; xを削除する。 //未定義の動作} ':P(基本クラスはパブリック仮想デストラクタまたは保護された非仮想デストラクタを必要とします) –
GManNickG
コンパイルされないという欠点があります;) – sth
@GMan:継承を非公開にします。 *パブリック*ベースクラスは、パブリック仮想デストラクタまたは保護された非仮想デストラクタを必要とします。あるいは、標準ライブラリがどのようなものであり、基本クラスが何であるかによって多かれ少なかれ多様な削除のための基本クラスを使用することに関する文書化された禁止。私は誰かが 'std :: iterator'に何かをキャストしてそれを削除するために多くのプログラムが失敗したとは思いません。 –