C++Builder 程序员博客
12 Nov
例如我对TStringList进行创建,发现new返回的地址与缓冲区不符,代码如下
void *p = malloc(sizeof(TStringList));
TStringList* s = new(p)TStringList;
(此次单步跟踪得到new返回的地址s的为:00B7AC78,但p的地址为:00B782A0,二者不相等)
s->~TStringList();
free(p);
但对AnsiString进行创建的时候,new返回值与缓冲区是一致的。
void *p = malloc(sizeof(String));
String* s = new(p)String;
(此次单步跟踪得到new返回的地址s的为:00B76F24,但p的地址为:00B76F24,二者相等)
s->~String();
free(p);
VCL是Delphi写的,构造行为和C++不一样
你先看看C++Builder5程序员参考指南.上面关于这部分的内容
VCL的类,构造顺序同C++类的顺序是反的。VCL类先构造祖先,然后逐步构造到你要实例的类。
如果要实现类似的构造方式,你可以使用HeapAlloc先申请内存,每次在内存中分配对象。