さて、誰もがペストのように生のポインターを避け、スマートポインターを好むべきであることを知っていますが、このアドバイスはコンテナーを実装するときに適用されますか?これは私が達成しようとしていることです:
template<typename T> class AVLTreeNode {
public:
T data;
unique_ptr<AVLTreeNode<T>> left, right;
int height;
}
Unique_ptrは、エレガントな方法で同じオブジェクトを一時的に指す複数のrawポインターを持つことができないため、コンテナー関数の記述をより面倒にする可能性があります。例えば:
unique_ptr<AVLTreeNode<T>> rotate_right(unique_ptr<AVLTreeNode<T>> n1)
{
unique_ptr<AVLTreeNode<T>> n2 = n1->left;
n1->left = n2->right;
n2->right = n1;
// n1 must now be referenced through the longer name n2->right from now on
n2->right->recalculate_height();
n2->recalculate_height();
return n2;
}
(この例では大したことではありませんが、どのように問題になるか想像できます)。このような問題を、古き良き、、、およびrawポインターを使用してコンテナーを実装する必要があるという強力なヒントとしてとらえる必要がありnew
ますdelete
か?デストラクタを作成しないようにするだけでも、非常に多くの問題が発生するようです。