我只使用链接列表的原始指针和模板.例如,成员数据,Node<T>* head;当我插入节点时,其中一行是head = new Node<T>(data);.
但是,现在我需要使用智能指针,我不知道如何更改它以使用智能指针.会员数据是否会更改为shared_ptr<Node<T>> head;,另一行会更改为
head = shared_ptr<Node<T>>( new <Node<T>>(data) );?
通过这个问题,一个答案说创建的对象在其范围之外被销毁.为了清楚地理解这个概念,我编写了以下代码:
#include <iostream>
using namespace std;
struct Node{
int val;
Node *next;
Node(int x) : val(x) , next(NULL){}
};
int main(){
for(int i=0;i<10;i++){
int someval = rand()%100;
Node somenode = Node(someval);
printf("Address for object %d is %p \n",i+1, &somenode);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
Address for object 1 is 0x7ffc32ff26b0
Address for object 2 is 0x7ffc32ff26b0
Address for object 3 is 0x7ffc32ff26b0
Address for object 4 is 0x7ffc32ff26b0
Address for object 5 is 0x7ffc32ff26b0
Address for object 6 is 0x7ffc32ff26b0 …Run Code Online (Sandbox Code Playgroud)