【发布时间】:2013-02-08 21:27:11
【问题描述】:
我有一个 A 类,它有一个私有 int _i 成员。我希望将 n 个 A 实例存储在一个向量中。因此,我给了向量一个初始容量。另外,我想保存具有不同 _i 值的对象,并在循环中构造具有不同值的对象。对应代码如下:
#include <vector>
#include <iostream>
using namespace std;
class A
{
public:
A( int i = -1 ) { _i = i; cout << "cc " << _i << endl; }
A( const A &other ) { _i = other._i; cout << "ccc " << _i << endl; }
~A() { cout << "dc " << _i << endl; }
int get_i() const { return _i; }
private:
int _i;
};
const int n = 2;
vector<A> v( n );
int main()
{
cout << "---" << endl;
for ( int i = 0; i < n; i++ )
v[i] = A( i );
cout << "---" << endl;
for ( int i = 0; i < n; i++ )
cout << v[i].get_i() << endl;
cin.ignore( 1 );
return 0;
}
output:
cc -1
ccc -1
dc -1
cc -1
ccc -1
dc -1
---
cc 0
dc 0
cc 1
dc 1
---
0
1
我认为,初始容量参数一开始会不必要地创建和销毁对象。并且在第一个循环中也不必要地创建了临时对象。我的问题是如何修复代码以直接将对象传递到向量中而无需默认和临时对象构造?以下是我想要的输出:
---
cc 0
cc 1
---
0
1
实际上,我不知道创建默认和临时对象是否会暴露性能问题。
【问题讨论】:
-
该代码不会生成该输出。
-
准确地说,我认为它因编译器而异。 @BenVoigt
-
不,我的意思是那个代码不会在任何编译器上打印出
-1。 -
为什么不呢?,我发布了真实的输出
-
对不起,你是对的。我之前编辑了问题做错了。
标签: c++ vector constructor temporary custom-type