在特定内存位置构造c ++对象[重复]

Posted

技术标签:

【中文标题】在特定内存位置构造c ++对象[重复]【英文标题】:Constructing a c++ object in a specific memory location [duplicate] 【发布时间】:2019-01-18 14:13:45 【问题描述】:

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

我正在尝试使用池,因此我已经为对象分配了内存(使用 malloc),并且我有我想去的地址。

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

这可能吗?

【问题讨论】:

【参考方案1】:

阅读更多关于 C++ 的内容(它是一种非常复杂的编程语言;很少有人能完全掌握它,我当然不会)。我推荐一本好书,例如Programming: Principle and Practice Using C++(C++ 的主要设计师Stroustrup 所著)。然后查看一些 C++ reference 站点和一些标准,如 n3337(用于 C++11)或一些更新版本(如 C++14 或 C++17)。

你想要placement new,所以用1在指针p(声明void*p;)的位置构造一个类Cla的对象,你的代码:

Cla*ptr = new(p) Cla(1);

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

【讨论】:

以上是关于在特定内存位置构造c ++对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

javascript原型和内存[重复]

在java中初始化数组时的堆栈和堆内存[重复]

成功创建c ++类和对象[重复]

如何在移动时知道元素位置[重复]

vector 如何在特定位置调用复制构造函数?

C ++将抽象类型的动态分配对象传递给函数并存储在向量中[重复]