gpt4 book ai didi

c++ - 安置问题 - 新!

转载 作者:太空狗 更新时间:2023-10-29 21:09:11 32 4
gpt4 key购买 nike

我在放置引用计数指针的实例时遇到问题 <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 之前和之后的引用计数是一样的。我很确定这是问题所在,但我不明白为什么不调用构造函数。另外 Pointer::Pointer(...) 编译是否需要一个指针 <T> & 或 const 指针 <T> &(嗯?),并且无论如何也有问题!

也许有一些我没有考虑到的新展示位置的细节。如果有人有一些想法,他们将不胜感激!

编辑:[根据要求,Pointer 的相关摘录]

// ...
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> 实现了 operator = & 和 T* ,以及运算符 -> 和运算符 T*

最佳答案

您的评论和您的代码不同步:

//! Copy Constructor
template<class X> Pointer(Pointer<X>& other)

从类模板生成的构造函数不是复制构造函数(12.8 [class.copy] 中的脚注对此进行了澄清),因此不会阻止编译器生成为你复制构造函数。此生成的构造函数将更好地匹配标准拷贝,因为在重载决策中非模板函数优于模板函数。

看来您需要在指针类中编写一个显式的复制构造函数才能获得所需的效果。

关于c++ - 安置问题 - 新!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1169745/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com