我在将引用计数指针<Type>
类的实例放入 Array 类时遇到问题。使用调试器,似乎从未调用构造函数(这会弄乱引用计数并导致段错误)!
我的 push_back 函数是:
void push_back(const T& element)
{
if (length >= max)
reallocate(max > 0 ? max * 2 : 1);
new (&data[length]) T(element);
++length;
}
引用计数在调用 new 之前和之后是相同的。我很确定这是问题所在,但我不知道为什么不调用构造函数。此外,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>
& and实现了 operator = T*
,以及 operator -> 和 operatorT*