所以现在我有一个像这样的类对象数组:
ClassA* object1[10];
object1[0] = new ClassA();
object1[1] = new ClassA();
现在我想使用schablone:
vector <ClassA> ver(10);
我不确定这是否正确。模板,但如何在main函数中将新对象插入此向量数组?
答案 0 :(得分:2)
如何在主函数
中将新对象插入此向量数组中
ver
已包含10
个默认初始化对象。所以你可以开始使用这些对象。奖金是你不需要删除它。
可能的用法 ver[3].classAFunc();
如果对象数量在编译时是固定且已知的,则std::array
在大多数情况下可能比std::vector
更好。
答案 1 :(得分:2)
您可以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的矢量。
答案 2 :(得分:1)
为什么你首先使用原始指针和原始动态数组?
在第一行中创建动态数组的C ++方法如下:
std::vector<ClassA*> object1(10);
这将创建一个包含10个空指针的向量。
接下来的两行可能是相同的,但你仍然有手动管理ClassA
对象的对象生命周期和内存的问题。让我们通过使用智能指针解决这个问题:
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