所以现在我有类对象的一个这样的数组:如何将类对象的数组转换为向量数组?
ClassA* object1[10];
object1[0] = new ClassA();
object1[1] = new ClassA();
现在我想用schablone:
vector <ClassA> ver(10);
我不知道这是否是正确的。模板,但我如何插入新的对象到主矢量数组中?
所以现在我有类对象的一个这样的数组:如何将类对象的数组转换为向量数组?
ClassA* object1[10];
object1[0] = new ClassA();
object1[1] = new ClassA();
现在我想用schablone:
vector <ClassA> ver(10);
我不知道这是否是正确的。模板,但我如何插入新的对象到主矢量数组中?
怎样在主要功能
ver
已经包含10
默认初始化的对象中插入新对象到这个矢量数组。所以你可以去开始使用这些对象。奖励是你不需要删除它。
可能使用ver[3].classAFunc();
如果对象的数量是固定的,在编译时已知,std::array
可能超过std::vector
更好的选择,在大多数情况下。
您可以通过pushing back或emplacing back来添加它们。例如:
std::vector<ClassA*> objects;
objects.push_back(new ClassA());
object1.push_back(new ClassA());
或者你可以使用一个初始化列表:
std::vector<ClassA*> objects{{new ClassA(), new ClassA()}};
你仍然需要记得删除的对象。
更好的办法是拥有一个shared_ptrs的向量。
谢谢你,但我正在寻找@Mohit Jain发布的答案。 :) –
为什么你首先使用原始指针和原始动态数组?
的C++方法来创建在第一行中的动态阵列将是以下:
std::vector<ClassA*> object1(10);
这产生在它10个空指针的载体。
接下来的两行可能是相同的,但是您仍然有手动管理对象的对象生命周期和内存的问题。让我们来解决,通过使用智能指针:
std::vector<std::unique_ptr<ClassA>> object1(10);
object1[0] = std::make_unique<ClassA>();
object1[1] = std::make_unique<ClassA>();
根据不同的情况下,你可能不会需要整整10元,最后8是空指针的向量。如果你想在矢量仅包含实际设置的元素,那么不分配的初始大小的矢量和刚推的对象,你实际上可以有:
std::vector<std::unique_ptr<ClassA>> object1; //empty vector
object1.push_back(std::make_unique<ClassA>()); //now has 1 element
object1.push_back(std::make_unique<ClassA>()); //now has 2 elements
而且作为最后的改进,除非你真的需要有是在矢量指针(例如,因为你必须多态元素),只需使用对象的矢量,而不是指针:
std::vector<ClassA> object1; //empty vector
object1.push_back(ClassA{}); //now has 1 element
object1.push_back(ClassA{}); //now has 2 elements
你为什么不使用'新[]'实例1中? –