我正在尝试在特定的内存位置上运行类的构造函数/默认初始化程序。
我正在尝试使用缓冲池,所以我为对象分配了内存(使用malloc),并且我有要去的地址。
我只是不知道如何在那个void *位置上运行对象的构造函数。
这可能吗?
答案 0 :(得分:2)
了解有关C ++的更多信息(这是一种非常复杂的编程语言;很少有人完全掌握它,而我当然不知道)。我推荐一本好书,例如 Programming: Principle and Practice Using C++ (由C ++的主要设计师Stroustrup撰写)。然后查看一些C++ reference网站和一些标准,例如n3337(对于C ++ 11)或一些较新的版本(例如C ++ 14或C ++ 17)。
您需要placement new
,因此要在指针Cla
(声明为1
)的位置构造一个参数为p
的类void*p;
的对象:
Cla*ptr = new(p) Cla(1);
顺便说一句,如果SubCla
是Cla
的子类(具有两个参数的适当构造函数),您当然可以拥有Cla*ptr = new(p) SubCla(1, "x");