【问题标题】:Array/Vector of Objects with custom constructors for elements具有元素的自定义构造函数的对象数组/向量
【发布时间】:2015-03-03 09:18:20
【问题描述】:

已经有很多关于在没有默认构造函数的情况下在 C++ 中创建对象数组的问题已得到解答

how to dynamically declare an array of objects with a constructor in c++

Constructors and array of object in C++

我想做的是创建一个数组,让我可以为每个元素拥有自定义构造函数。

在 C++ 中最好或最惯用的方法是什么?

例子:

MyClass *myVar;
myVar = new MyClass[5];
int i = 0;
for(i = 0;i < num;i++)
   myVar[i] = new MyClass(i,i);

在这种情况下,您会看到一个指针数组,并且在 for 循环中,我们使用自定义构造函数参数创建一个对象。但是,我不确定这是否是最好的方法,因为它在堆上分配数据,可能不是连续的,分配问题,添加指针等等。

我问这个的原因是我不想初始化一个包含 n 个对象的数组 _only 以使用set_data 方法编辑元素。

例子:

[stuff] //initialize array with default values
for(i = 0;i < num;i++)
   myVar[i].set_data(i)

因为set_data 可能会编辑一些只能在初始化时设置的数据。 (当然,set 私有变量可用于跟踪对象是否已设置,但这看起来很笨拙 - 或者这在 C++ 中通常是如何完成的?

【问题讨论】:

    标签: c++ arrays constructor


    【解决方案1】:

    首先,您的第一个示例几乎是正确的:您需要一个指针数组,而不是对象:

    MyClass **myVar;
    myVar = new MyClass*[5];
    int i = 0;
    for(i = 0;i < num;i++)
       myVar[i] = new MyClass(i,i);
    

    首先你分配一个指针数组,然后用一个指向指针的指针来捕获它。然后你分配特定的对象。

    关于您的问题,最好的方法不是一开始就发明轮子!只需使用 std::vector ! 例如,我想创建一个 Cars 数组,每个都有不同的公司和颜色:

    std::vector<Car> cars;
    cars.push_back(Car(Company::Toyota,Color::Red));
    cars.push_back(Car(Company::Subaru,Color::Blue));
    

    如果实现了向量,则首先尝试使用移动构造函数,如果没有实现,则尝试使用复制构造函数。

    【讨论】:

    • 是的,不用担心示例代码,它们更像是伪代码(我主要是在寻找在 c++ 中执行此操作的方法,因为我来自高级语言)。所以我猜是向量!
    • 如果您是 C++ 新手,那么我的建议是尽可能使用 STL。矢量和地图是你最好的朋友!
    • 你可以创建一个模板类类型T。这个类应该有一个指向数组类型T的指针。然后用你自己的构造函数创建你自己的类。现在您可以使用模板类中的指针指向您自己的类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    相关资源
    最近更新 更多