【发布时间】:2012-09-07 21:23:16
【问题描述】:
我已经创建了一个名为 Queue 的类模板,但我在尝试使用指向另一个名为 Worker 的类作为类型的指针来实例化它时遇到问题。 Queue<Worker*>
我认为这个具体的 Queue 方法带来了问题:
// Add item to queue
template <typename Type>
bool Queue<Type>::enqueue(const Type& item)
{
if (isfull())
return false;
Node* add = new Node; // create node
// on failure, new throws std::bad_alloc exception
add->item = item; // set node pointers (shallow copying!!!!!)
add->next = nullptr;
items++;
if (front == nullptr) // if queue is empty,
front = add; // place item at front
else
rear->next = add; // else place at rear
rear = add; // have rear point to new node
return true;
}
在类型参数是指针的情况下,我需要复制指向的值,而不是地址(我正在使用动态内存管理)以避免程序崩溃。
我不知道如何用模板解决这个问题。
有什么帮助吗?
【问题讨论】:
-
大多数通用容器不知道它们持有指针,因此它们会进行浅拷贝
-
如果您喜欢冒险,可以深入研究Boost Pointer Containers 的源代码,看看他们是如何做到的。
标签: c++ templates pointers dynamic-memory-allocation class-template