【发布时间】:2017-04-12 15:04:27
【问题描述】:
我头疼。下面的代码 sn-p 对吗?我想创建一个包含 19 个 B 对象的数组,其中包含另一个 X A 对象数组。 (X 是可变的,我的意思是 As 数组在 B 对象之间的长度可能不同)
稍后我想说类似B_obj[i].As[j].number = 0;
(i = [0-18], j = [0 - 取决于对象])
例子:
class A
{
public:
A();
private:
char *arena;
size_t size;
int number;
};
A::A()
{
size = 5;
arena= (char *) malloc (size);
... some code ...
}
class B
{
private:
int counter;
A* As;
public:
B();
};
B::B()
{
counter = getMyNumber(); /* getMyNumber returns an individual ID */
As= (A*) malloc(counter * sizeof(A)));
}
B B_obj[19];
内存分配正确吗?一切都必须设置好,我以后不能分配额外的内存。
【问题讨论】:
-
每当你想到“动态数组”,你下一个想到的应该是
std::vector。 -
1.不要在 C++ 中使用
malloc(某些高级情况除外) 2. 不要使用原始数组(首选std::vector) -
并且从不使用
malloc在C++中分配内存。虽然它可以分配内存,但它不会构造对象。 IE。在您的情况下,永远不会调用A构造函数。使用std::vector当然可以解决分配和构造问题。 -
@Someprogrammerdude 谢谢你的建议。我选择了 malloc,因为我必须使用一个类似的函数,它只返回一个指向某些内存的指针。我会尝试使用向量。您能否给我一个提示,关于如何调用 A 的构造函数?我需要改变什么?
-
这是 C++ 的优点之一。你不调用构造函数。如果您静态分配或使用
new分配,则会为您调用构造函数。
标签: c++ arrays class constructor