关于C++STL中的vector,可否把类对象当做元素

一般用vector存储类对象时都用以下的形式:classA{};vector<A>v1;Aa;v1.push_back(a);这种事静态的加入;还可以动态加入:vecto... 一般用vector存储类对象时都用以下的形式:
class A
{};
vector<A> v1;
A a;
v1.push_back(a);
这种事静态的加入;
还可以动态加入:
vector<A*> v2
v2.push_back(&new A());

但是我想直接用vector<A>这种形式动态添加,vector<A> v3;
v3.push_back(A());
这样编译器是通过的,但我想知道这里用的是静态空间还是动态空间,如果是静态空间,是不是vector中保存的是A()的一个副本,而真正的A的对象是一个没有名字的A()?
展开
 我来答
sylecn
2010-01-12 · TA获得超过2991个赞
知道大有可为答主
回答量:1169
采纳率:57%
帮助的人:745万
展开全部
你的“动态加入”的代码很有问题,最好不要用。
其一,vector<A*>中存的是指针,如果class A有析构函数,copy,move,delete都会出问题。
其二,new A()返回的是一个指针,不需要使用&运算符。

vector<A> v3;
v3.push_back(A());
没有问题,使用的是stack,不是heap。v3中存的是一个副本。具体过程:
1. 创建一个临时的A对象
2. 如果v3有足够的空间,将A对象复制到v3对应的空间(使用赋值函数assignment function);
如果v3没有足够的空间,先扩容,再创建一个A对象(使用拷贝函数copy constructor)。
3. 然后,临时的A被销毁

这种方法没有任何问题,既不存在内存泄漏,也不存在析构函数不被调用的问题。
scorpiomonkey
2010-01-11
知道答主
回答量:34
采纳率:0%
帮助的人:0
展开全部
是静态空间的,无所谓真正的A对象,反正都是栈空间
无所谓的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式