嵌套 class 的动态数组,里面有一个数组?可以吗?
dynamic array of a nested class with an array in it? Can it be done?
此代码可以编译但立即崩溃。我只在 devcppPortable
上试过。我正在尝试制作一个可以存储大量复杂数据的 class(即具有多个 属性 集并且每个集包含多个数字的对象)。
创建的每个对象都将具有唯一数量的 属性 集和内部 属性 值。我希望能够在声明时调整 class,以免分配一堆未使用的 space。这样的事情甚至可能吗?
#include<iostream>
using namespace std;
class a
{
public:
int amount;
struct b
{
int max;
int* prop;
b() {}
void set(int&);
~b(){delete prop;}
};
b* property;
a(int amt, int max0, int max1=0, int max2=0);
~a(){delete property;}
};
int main()
{
a object(2, 3, 5);
return 0;
}
a::a(int amt, int max0, int max1, int max2)
{
amount = amt;
property = new b[amt];
switch(amt)
{
case 3:
property[2].set(max2);
case 2:
property[1].set(max1);
case 1:
property[0].set(max0);
}
}
void a::b::set(int& m) {max = m; prop = new int[max];}
你用 new[]
分配了 property
但用 delete
删除了它,而不是 delete[]
此代码可以编译但立即崩溃。我只在 devcppPortable
上试过。我正在尝试制作一个可以存储大量复杂数据的 class(即具有多个 属性 集并且每个集包含多个数字的对象)。
创建的每个对象都将具有唯一数量的 属性 集和内部 属性 值。我希望能够在声明时调整 class,以免分配一堆未使用的 space。这样的事情甚至可能吗?
#include<iostream>
using namespace std;
class a
{
public:
int amount;
struct b
{
int max;
int* prop;
b() {}
void set(int&);
~b(){delete prop;}
};
b* property;
a(int amt, int max0, int max1=0, int max2=0);
~a(){delete property;}
};
int main()
{
a object(2, 3, 5);
return 0;
}
a::a(int amt, int max0, int max1, int max2)
{
amount = amt;
property = new b[amt];
switch(amt)
{
case 3:
property[2].set(max2);
case 2:
property[1].set(max1);
case 1:
property[0].set(max0);
}
}
void a::b::set(int& m) {max = m; prop = new int[max];}
你用 new[]
分配了 property
但用 delete
删除了它,而不是 delete[]