我有一个Foo
来自外部 API 库的结构,它是 C 语言,在它之上我正在编写一个 C++ 接口。
所以我有这样的课:
class ClassFoo
{
public:
ClassFoo(const Foo * ptr) : ptr(ptr) { }
~ClassFoo();
bool method1();
int method2();
... (other methods)
private:
const Foo * ptr;
}
然后,外部库定义另一个struct Bar
是Foo
s 的集合、获取 foo 数量的方法和检索Foo*
指针数组的方法:
int APIbarGetNumFoos(const Bar* ref);
void APIbarGetFoos(const Bar* ref, int maxSize, const Foo* foos[]);
我这样定义ClassBar
:
class ClassBar
{
public:
ClassBar(const Bar * ptr) : ptr(ptr) { }
~ClassBar();
std::vector<ClassFoo> getFoos();
... (other methods)
private:
const Bar * ptr;
}
现在的问题是:为了内存和速度效率,我想避免分配一个数组Foo*
来调用 C API,然后将所有内容复制到结果向量中。
如果我不使用任何虚拟方法(以避免 vtables), C++ 是否保证ClassFoo
实例只包含一个Foo*
指针,并且它的大小是指针的大小,以便我可以这样定义getFoos()
:
std::vector<ClassFoo> ClassBar::getFoos()
{
int size = APIbarGetNumFoos(ptr);
std::vector<ClassFoo> result(size);
APIbarGetFoos(ptr, size, (const Foo**) &result[0]);
return result;
}
换句话说,我可以确定一个数组ClassFoo
在内存中与一个数组完全相同Foo*
吗?
谢谢!
艾蒂安