下面是包含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