(请不要让我只使用STL;我知道我可以,但是我正试图写一个自己来学习C ++)。
到目前为止,在我所看到的链表的每种实现中,我们都有类似以下内容:
template <typename T>
void List<T>::insertAtFront(const T & data) {
// Create a new ListNode on the heap:
ListNode *node = new ListNode(data); // <----- LINE [*]
// Re-point head, next, etc.
// ...
}
我的问题是关于第[*]行。这里存在一个潜在的昂贵拷贝分配(取决于T
的复杂程度),因为首先我们从ListNode
构造新的data
,然后将其分配给*node
。我已经通过编写自己的赋值运算符并逐步执行代码进行了检查。
难道没有办法让node
指向新建的ListNode
吗?