删除向量中携带的对象? < P>在C++应用程序中,我在一个类的用户对象中创建一个特定类车辆的用户对象,每个操作符在每个实例化之后都是右的,我把它们放在一个向量中,这是第一类的属性(即:向量 V1 < /代码>)。
在程序运行时,我可能需要在某个点删除车辆类的对象。我应该使用操作符delete吗?如果是这样,如何对向量执行此操作?有没有预定义的向量函数来做同样的工作?当我删除它们时,Vehicle类的属性会发生什么变化,在这种情况下,这些属性是指向其他对象的指针?它们是否也被删除删除向量中携带的对象? < P>在C++应用程序中,我在一个类的用户对象中创建一个特定类车辆的用户对象,每个操作符在每个实例化之后都是右的,我把它们放在一个向量中,这是第一类的属性(即:向量 V1 < /代码>)。,c++,memory-management,vector,C++,Memory Management,Vector,在程序运行时,我可能需要在某个点删除车辆类的对象。我应该使用操作符delete吗?如果是这样,如何对向量执行此操作?有没有预定义的向量函数来做同样的工作?当我删除它们时,Vehicle类的属性会发生什么变化,在这种情况下,这些属性是指向其他对象的指针?它们是否也被删除 如果在程序结束前不需要删除它们,它们是由析构函数删除还是应该“手动”删除 这是C++方式: #include <memory> #include <vector> #include "vehicle.hp
这是C++方式:
#include <memory>
#include <vector>
#include "vehicle.hpp"
typedef std::vector<std::unique_ptr<Vehicle>> vehicle_container;
#include "derivedvehicles.hpp"
int main()
{
vehicle_container v;
//...
v.emplace_back(new Car);
v.emplace_back(new Bike);
//...
} // baam, everything is cleaned up
#包括
#包括
#包括“vehicle.hpp”
typedef标准::矢量车辆\集装箱;
#包括“derivedvehicles.hpp”
int main()
{
车辆/集装箱v;
//...
v、 后置(新车);
v、 后置(新自行车);
//...
}//砰,一切都打扫干净了
这里有一个更好的方法(IMHO):
#包括
#包括“vehicle.hpp”
typedef boost::ptr_矢量车辆容器;
#包括“derivedvehicles.hpp”
int main()
{
车辆/集装箱v;
//...
v、 后置(新车);
v、 后置(新自行车);
//...
v[0].go();//像对象(不是指针)一样访问元素
//这使得在任何标准中使用
//算法微不足道。
}//塔达,一切都打扫干净了
切勿使用删除。切勿使用指针
。只能在智能指针的构造函数中使用new
。@Kerrek:“永远不要使用指针
”是不正确的。永远不要使用拥有原始指针会更正确。@Xeo:可以说,原始指针不能真正“拥有”自己的权利——它的所有权是非本地的外部信息。“魔力”,当然是独一无二的(nee“auto_ptr”,又名“smart pointer”)。因此基本上鼓励它一直使用emplace\u back
(除非您仍然需要添加副本的对象)而不是push_back
对吗?@nwp:将容器设计选项与使用它的示例代码分离?我看不到这种分离带来的灵活性或抽象收益,所以对我来说这看起来像是混淆。
#include <boost/ptr_container/ptr_vector.hpp>
#include "vehicle.hpp"
typedef boost::ptr_vector<Vehicle> vehicle_container;
#include "derivedvehicles.hpp"
int main()
{
vehicle_container v;
//...
v.emplace_back(new Car);
v.emplace_back(new Bike);
//...
v[0].go(); // Elements accessed as if they are objects (not pointers)
// Which makes using in any of the standard
// algorithms trivial.
} // ta-da, everything is cleaned up