【发布时间】:2016-11-27 20:36:29
【问题描述】:
我编写了这段代码来在堆上存储对象。工作正常......但我想知道“需要”或者更好的说法是编写这样的代码有什么好处。像 deque 这样的 STL 数据结构不是已经自动完成了我这里写的,也就是说,将对象存储在堆上吗?
如果不清楚,我使用的语法 data.push_back(shared_ptr(new Vehicle("aba"))); 使它在堆上存储对象,但不会 data.push_back(车辆(“aba”)); 默认情况下也这样做?
然后我可以将对数据结构的引用传递给函数,并且无论哪种方式都同样精简,不是吗?在这一点上,我质疑当存储的对象存储在 STL 数据结构中时,是否真的有任何用例来打扰智能指针。也许我应该让 C++ 自动管理它,然后将智能指针传递给数据结构本身,或者只是对它的引用。
deque<shared_ptr<Vehicle>> data;
data.push_back( shared_ptr<Vehicle>(new Vehicle("aba")) );
data.push_back( shared_ptr<Vehicle>(new Vehicle("bobo")) );
data.push_back( shared_ptr<Vehicle>(new Vehicle("cici")) );
data.push_back( shared_ptr<Vehicle>(new Vehicle("dede")) );
data.push_back( shared_ptr<Vehicle>(new Vehicle("efee")) );
for(unsigned int i =0; i < data.size(); i++ )
{
cout << data.at(i)->getName() << endl;
}
data.pop_front();
data.pop_back();
for(deque<shared_ptr<Vehicle>>::iterator i = data.begin(); i != data.end(); )
{
cout << (*i)->getName() << endl;
++i;
}
【问题讨论】:
-
这取决于容器分配器。此外,如果您需要使用多态性,则需要(您自己的)指针。最后,容器中的数据不像
std::shared_ptr那样是共享指针。