参照カウントポインタ<Type>
クラスのインスタンスを配列クラスに配置する際に問題が発生しました。デバッガーを使用すると、コンストラクターが呼び出されることはないようです(これにより、参照カウントが台無しになり、セグメンテーション違反が発生します)。
私のpush_back関数は次のとおりです。
void push_back(const T& element)
{
if (length >= max)
reallocate(max > 0 ? max * 2 : 1);
new (&data[length]) T(element);
++length;
}
newが呼び出される前の参照カウントはafterと同じです。これが問題であると確信していますが、コンストラクターが呼び出されない理由がわかりません。さらに、Pointer :: Pointer(...)は、Pointer <T>
&またはconst Pointer&のどちらを使用するかをコンパイルします<T>
(え?)、それでも問題があります!
たぶん、私が考慮していない新しい配置に関するいくつかの詳細があります。誰かが何か考えを持っているなら、彼らは大いに感謝されるでしょう!
編集:[要求に応じて、ポインターからの関連する抜粋]
// ...
private:
T* p;
public:
//! Constructor
Pointer()
: p(0)
{
}
//! Copy Constructor
template<class X> Pointer(Pointer<X>& other)
: p(other.getPointer())
{
if (p)
p->incrementRef();
}
//! Constructor (sets and increments p)
Pointer(T* p)
: p(p)
{
if (p)
p->incrementRef();
}
//! Destructor (decrements p)
~Pointer()
{
if (p)
p->decrementRef();
}
// ...
ポインター<T>
&と、、およびT*
演算子->と演算子の演算子=も実装しましたT*