当构造关于对象的容器时,如下的构造方式当然是可行的:
class A{
public:
int a;
vector<int> vec;
}
vector<A>;
出于效率考虑最好构造关于容器指针的容器,比如:
class A{
public:
int a;
vector<int> vec;
}
vector<A*>;
这样的构造在拷贝时可以不用管具体对象里面的构造是怎样的,直接拷贝指针,速度非常快。但是,直接使用指针会带来非常大的隐患,最好的情况还是使用智能指针的容器。
class A{
public:
int a;
vector<int> vec;
}
vector<shared_ptr<A>>;
针对直接使用对象构造容器和使用智能指针的场景做了一个测试,class A中的vec大小为10000,容器vector<shared_ptr>的大小为100000,遍历一遍拷贝。
结果:方法1的时间为:1567ms,方法2的时间为1ms。
结论:结论可以看到容器拷贝智能指针几乎不耗时,也不会引入内存泄漏的风险。