簡體   English   中英

將 C++ 鏈接堆棧轉換為智能指針

[英]Converting C++ linked stack into smart pointers

我有一個關於將以下代碼轉換為智能指針的問題,特別是在共享指針方面。 Node.cpp 是類模板Node<T>的實現文件,其構造函數定義如下。

節點.cpp

...
template <typename T>
Node<T>::Node(const T& anItem, std::shared_ptr<Node<T>> nextNodePtr)
    : item(anItem), next(nextNodePtr) { }

...

鏈接堆棧文件

...
template <typename T>
bool LinkedStack<T>::push(const T& newItem) {

   topPtr = new Node<T>(newItem, topPtr);

   return true;
}
...

LinkedStack.cpp(在共享指針方面,我的嘗試)

...
template <typename T>
bool LinkedStack<T>::push(const T& newItem) {

   std::shared_ptr<Node<T>> topPtr
       = std::make_shared<Node<T>>(Node<T>(newItem, topPtr));
   return true;
}
...

這是將 LinkedStack.cpp 轉換為使用共享指針的形式的正確方法嗎?

std::shared_ptr<Node<T>> topPtr宣布新的品牌,本地變量,並躲到topPtr ,我認為是一個LinkedStack成員變量。 結果是幾乎立即破壞了本地topPtr 並且沒有在LinkedStack::topPtr放置任何東西

您需要做一些更像轉換前版本的事情:

topPtr = std::make_shared<Node<T>>(Node<T>(newItem, topPtr));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM