私は本でこのコード、単純なスマート ポインターに出くわしました。それについていくつか質問があります。
template <class T>
class SmartPointer {
public:
SmartPointer(T * ptr) {
ref = ptr;
ref_count = malloc(sizeof(unsigned));
*ref_count = 1;
}
SmartPointer(SmartPointer<T> & sptr) {
ref = sptr.ref;
ref_count = sptr.ref_count;
++*ref_count;
}
SmartPointer<T> & operator=(SmartPointer<T> & sptr) {
if (this != &sptr) {
ref = sptr.ref;
ref_count = sptr.ref_count;
++*ref_count;
}
return *this;
}
~SmartPointer() {
--*ref_count;
if (*ref_count == 0) {
delete ref;
free(ref_count);
ref = ref_count = NULL;
}
}
T* operator->() { return ref; }
T& operator*() { return *ref; }
protected:
T * ref;
unsigned * ref_count;
};
ここに私の質問があります: 1. ref_count が malloc を使用して初期化されるのはなぜですか? なぜできないのですか ref_count = new unsigned(); 2. = 演算子関数、古い値をクリーンアップする必要はありませんか? このコードは参照カウント エラーを引き起こすようです。
ありがとう、