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

c++的stl的vector的push_back()的有关问题

2013-08-09 
c++的stl的vector的push_back()的问题struct SCCnum{int leaderint numSCCnum(int i, int j) : leader(i

c++的stl的vector的push_back()的问题


struct SCCnum
{
    int leader;
    int num;
    SCCnum(int i, int j) : leader(i), num(j){};
};
vector<SCCnum> sn;

问题一:我如果相对sn进行push_back()操作,以下两种哪种正确(我查了下资料,貌似应该是第二种正确,但是第一种我的gcc也能编译过这是为啥?)?
1: sn.push_back(new SCCnum(1,2));
2: sn.push_back(SCCnum(1,2));

问题二:如果第一种正确,这种情况下,是不是当我访问sn[0]的时候,实际是访问的new出来的那部分内存空间?

多谢大家了! stl c++
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

第二种对的吧

sn.push_back(new Object())是可以的,因为这样生成了一个新的类实例,并返回了这个实例的内存地址,所以是可以插入到vector容器中的。但vector存的是SCCnum对象

那请问第二种具体在内存中是怎样进行的呢?
比如说,如果是

SCCnum temp(1,2);
sn.push_back(temp);

我可以理解为先调用构造函数来在内存中创建temp这个对象,然后再把temp变量里的内容复制到sn这个vector中去。
那请问这第二种方式在内存中是怎么进行的呢?是不是先在内存中创建了一个临时的SCCnum这个类的对象(跟temp一样,只不过是临时的),然后把这里面内容复制到sn里呢?那SCCnum(1,2)作为sn.push_back()的参数,实际上是将什么传进了sn.push_back()呢(也就是SCCnum(1,2)的返回值是啥啊?)?

我刚开始学编程,多谢大家的热心回答!

返回的是一个SCCnum的匿名对象其leader=1, num=2和
SCCnum temp(1,2);
sn.push_back(temp);效果一样

所谓匿名对象是不是就是在内存里临时开出来一块地方,在进行完这次push_back()操作之后,很快就会被os收回?


匿名对象只存在构造该对象的那行代码,离开构造匿名对象那行代码后立即调用析构函数。

热点排行