下面是包含int data
和NodePtr next
的鏈接列表Node
結構示例。對原始指針使用typedef與shared_ptr
我的想法是對NodePtr
使用typedef
,因爲我想試驗一個原始指針與一個shared_ptr。另外,爲了簡單起見,我希望能夠改變一條線從一條線到另一條線。
使用原始指針,下面的代碼編譯得很好。
typedef struct Node* NodePtr;
struct Node {
int data;
NodePtr next;
};
但如果我只是typedef的改變爲一個shared_ptr,我得到的編譯錯誤。
typedef std::shared_ptr<Node> NodePtr;
struct Node {
int data;
NodePtr next;
};
error: ‘Node’ was not declared in this scope
error: template argument 1 is invalid
我可以通過提前申報Node
來解決這個問題。但是,Node
的雙重定義對我來說看起來有點難看。
struct Node;
typedef std::shared_ptr<Node> NodePtr;
struct Node {
int data;
NodePtr next;
};
那麼,爲什麼第一typedef
做工精細,但第二個不? 而且,有可能在不使用前向聲明的情況下typedef shared_ptr
?
順便說一句,一個'shared_ptr'是在所有的概率錯誤的智能指針在這裏。你真的想共享所有權嗎?鑑於結構,是不是'unique_ptr'更可能? –
謝謝,是的,shared_ptr不是這個例子所需要的。 我只是試驗如何用智能指針替換原始指針。 – user2602740