构造函数/析构函数涉及类和结构

时间:2012-04-11 19:12:31

标签: c++ constructor destructor

我正在研究一个程序并且需要创建一个对象数组,特别是我有一个31x1数组,其中每个位置都是一个对象,(每个对象基本上是由6个整数构建的)。这是我所拥有的,但有些事情是错的,我可以使用一些帮助,谢谢你。

31x1 struct header“

const int days=31;

struct Arr{

    int days;
    int *M;
};
typedef Arr* Array;

31x1矩阵构造函数:

void constr(){
    int *M;
    M = new Expe[31]; // Expe is the class 

类标题:

class Expe {
private:
    //0-HouseKeeping, 1-Food, 2-Transport, 3-Clothing, 4-TelNet, 5-others
    int *obj;
}

类对象构造函数:

Expe::Expe() {
    this->obj=new int[6];
}
请帮助...因为我很丢失。

1 个答案:

答案 0 :(得分:3)

除非必须,否则不应使用new。你正在动态分配你必须在之后手动删除的内存。

相反,使用静态分配的数组:

struct Arr{
    int days;
    Expe M[31];
}

这样你不需要构造M,它会自动填充31个Expe对象。 Expe中的int数组也是如此。

(提示:结构和类几乎完全相同。它们的不同之处在于结构的默认可见性是公共的。除此之外,结构可以像类一样具有成员函数和构造函数。)

如果必须使用动态分配,则应遵循以下表示法:

X* variableName = new X[size];
...
delete[] variableName; //Be sure to get rid of unused memory afterwards.

如果要在其中存储一组int,则指针只应为int*类型。

您还可以将const int用于数组大小声明。所以这是有效的:

const int size = 5;
int X[size];

您可以使用它来消除代码中的“神奇数字”。

typedef Arr* Array;这样的Typedef通常在C中使用,而不是在C ++中使用。几乎没有任何情况你需要输入这样的东西。

如果您发布整个代码,我们可能会提供更好的帮助。您的代码中似乎不仅有一两个错误,而且还有一些基本的理解。