我有一个被描述成这样的类:
class Foo {
int size;
int data[0];
public:
Foo(int _size, int* _data) : size(_size) {
for (int i = 0 ; i < size ; i++) {
data[i] = adapt(_data[i]);
}
}
// Other, uninteresting methods
}
我无法修改那个类的设计。
如何创建该类的实例?在调用构造函数之前,我必须使其预留足够的内存来存储其数据,因此它必须在堆上而不是栈上。我猜想我需要这样的东西:
Foo* place = static_cast<Foo*>(malloc(sizeof(int) + sizeof(int) * size));
*place = new Foo(size, data); // I mean : "use the memory allocated in place to do your stuff !"
但是我找不到让它工作的方法。
编辑:正如评论者所指出的,这不是一个非常好的总体设计(使用了非标准技巧,如
data[0]
),不幸的是这是一个我被迫使用的库...
int data[0]
不是合法的 C++ 语法。 - Kerrek SBnew (address) Type(arguments...);
这里的address
是void*
类型。使用放置 new 创建的任何东西必须通过显式调用析构函数来销毁;我怀疑你不想手动执行这个过程,因此最好编写一个包装器来处理Foo
的正确分配/释放。 - Matthieu M.