在C ++应用程序中,我在一个类的各个点创建一个特定类的User对象在每个实例化之后使用operator new和right将它们放在一个向量中,该向量是第一个类的属性(即{{1} })。
在程序运行时,我可能需要删除类Vehicle的对象。我应该肯定使用运营商删除吗?如果是这样,如何对矢量做?是否有任何预定义的矢量功能来完成相同的工作?当我删除它们时,Vehicle类的属性会发生什么,在这种情况下是指向其他对象的指针?它们也被删除了吗?
如果在程序结束之前无需删除它们,它们是由析构函数删除还是“手动”删除?
答案 0 :(得分:2)
这是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
答案 1 :(得分:0)
这是一个更好的方法(恕我直言):
#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