首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这段代码中为啥n->l变了,n->a没变,怎么做到让程序不复制*n,直接把*n添加到t中

2013-07-01 
这段代码中为啥n-l变了,n-a没变,如何做到让程序不复制*n,直接把*n添加到t中?#include iostream#includ

这段代码中为啥n->l变了,n->a没变,如何做到让程序不复制*n,直接把*n添加到t中?


#include <iostream>
#include <list>
using namespace std;

struct node
{
int a;
list<int> l;
};

int main(int argc, char **argv)
{
list<node> t;
node *n=new node;
n->a=1;
n->l.push_back(2);
cout<<"n->l.size():"<<n->l.size()<<endl;//1
t.push_back(move(*n));
cout<<"n->l.size():"<<n->l.size()<<endl;//0
cout<<n->a<<endl;//仍然为1
delete n;
return 0;
}

这段代码中为啥n->l变了,n->a没变,如何做到让程序不复制*n,直接把*n添加到t中? move C++11
[解决办法]
你定义成 list<node*>, 插入 n 撒

或者定义一个类来包装 node*, 然后为这个类重载 operator =(&&) 
[解决办法]
直接构造需要用 emplace_back,不是 push_back.

热点排行