【发布时间】:2019-12-05 21:38:36
【问题描述】:
我在初始化(构造函数)对象的数组指针时遇到了一点问题。请参阅下面的课程。类 test 有 2 个变量成员,一个将是数组的指针(值)和他的大小(大小);以及一个带参数的构造函数和一个析构函数。在主函数中,我将创建一个对象数组指针,但我有问题。如果我创建一个像这样的对象:
-
test obj(4);会创建一个对象,他的实例,值数组是大4。
如果我想创建一个对象数组:
test *obj;
obj = new test[2]{4,7};
我将创建 2 个对象:obj[0] 是大 4,obj[1] 是大 7。
所以如果我想创建更多对象:
test *obj;
obj=new test[100]{/*here I must write 100 numbers*/}
这就是问题所在。 因为我不会写这样的东西:
test *obj;
obj=new int[100]{4}
我希望每个值[](测试类的实例)都是大 4,我不会写 100 次“4”。
我想到了声明数组的类比:
如果我写int array[5]={0,0,0,0,0},我必须写4次“0”,或者我也可以写:
int array[5]={0},每个值都设置为0。(如果写int array[5]={5},第一个索引将为5,其他为0)。
我应该使用默认构造函数吗?我该怎么办?
#include <iostream>
using namespace std;
class test
{
private:
int* value;
int size;
public:
test(int size)
{
this->size = size;
value = new int[size];
}
~test()
{
delete[]value;
}
};
【问题讨论】:
-
为什么不直接使用
std::vector? -
是的,这是另一种可能的方式。但我会知道该怎么做(只是为了知识)。
-
test不遵循 5/3/0 的规则。导致复制/移动问题。将std::vector用于value将解决该问题。
标签: c++ object pointers constructor