在特定的内存位置构造一个c ++对象

时间:2018-08-11 00:15:13

标签: c++

我正在尝试在特定的内存位置上运行类的构造函数/默认初始化程序。

我正在尝试使用缓冲池,所以我为对象分配了内存(使用malloc),并且我有要去的地址。

我只是不知道如何在那个void *位置上运行对象的构造函数。

这可能吗?

1 个答案:

答案 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);

顺便说一句,如果SubClaCla的子类(具有两个参数的适当构造函数),您当然可以拥有Cla*ptr = new(p) SubCla(1, "x");