作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在放置引用计数指针的实例时遇到问题 <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/
我正在尝试在共享内存段中分配一个第三方类(不是我写的)。 不知道这个类是如何实现的,但它可能包含另一个"new"、“malloc”调用来为其需要分配内存。 这是否意味着这个新内存将不会在共享内存段内分
我是一名优秀的程序员,十分优秀!