これはもちろん、デフォルトのメンバーイニシャライザのためにC++ 11以上でのみ動作します。しかし、これを書いて、あなたはnow required to provide (or =delete
) your copy/move constructors and assignment operatorsです。このメモリを削除するデストラクタはもちろんですが、
つまり、どのようなコピー動作をしたいのかを決める必要があります。まったくコピーを許可しますか?そうでない場合は、それを示すのに=delete
を使用する必要がありますか?もしそうなら、コピーは何をすべきですか?それはポインタconstなので、ポインタ自体をコピーすることはできません。少なくとも、コピー代入の場合ではありません。したがって、コピーする場合は、ポイント先のオブジェクトをコピーする必要があります。
あなたのポインタconstのおかげで、移動は不可能です(const_cast
なし)。したがって、あなたの移動コンストラクタ/代入は、単にポインタではなくCustomList<Identifier*>
オブジェクトを移動する必要があります。
また、これらのすべてのユーザー定義操作のため、ClassName
は、もはやコピー可能なタイプとはみなされません。リンクされたリストを格納していることを前提としていますが、おそらくいずれかの方法で自明にコピーすることはできません。
これは悪いスタイルと考えられますか?すべてのものが平等である、はい。あなたが動的割り当てを使用するには、本物の、よく考えられた理由がない限り、それは良いでしょうし、最終的にははるかに安全なプログラミングスタイルはそれ値ではなくポインタ作るために:
CustomList<Identifier*> identifier_list("someString");
なぜあなたも、ポインタを使用していますか? 'CustomList identifier_list;'はあなたに存在することが保証された自動オブジェクトを与えます。 –
NathanOliver
ヒープを使用したい –
なぜですか? 'CustomList'はそれほど大きなオブジェクトではありません。 – NathanOliver