且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如果我们想使用malloc分配内存,如何显式调用构造函数?

更新时间:2023-11-13 13:53:46

shsingh写道:
shsingh wrote:

我有一个包含一些地图作为数据变量的A类。我通过使用malloc分配内存来在堆上创建类A的

对象。这个

将返回我所需的内存,但是对象没有被初始化

正确,因为构造函数不会被调用(根据行为)。


如果我们想使用malloc分配内存

,如何显式调用构造函数?
I have a class A containing some map as data variables. I creat an
object of class A on heap by allocatiing memory by using "malloc". This
will return me the required memory but the object is not initialized
properly as constructor same is not get called ( as per the behavior).

How to call a constructor explicitly if we want to allocate memory
using malloc ?



你的创建对象是用新的堆,而不是malloc。


A * pA =新的A;


用删除释放内存和对象。


删除pA;

Your create object on the heap with new, not malloc.

A *pA = new A;

You free the memory and object with delete.

delete pA;


shsingh写道:
shsingh wrote:

我有课包含一些地图作为数据变量。我通过使用malloc分配内存来在堆上创建一个类A的对象
对象。

这将返回我所需的内存,但对象不是

正确初始化,因为构造函数不会被调用(根据

行为)。


如果我们想要如何显式调用构造函数使用malloc分配内存


I have a class A containing some map as data variables. I creat an
object of class A on heap by allocatiing memory by using "malloc".
This will return me the required memory but the object is not
initialized properly as constructor same is not get called ( as per
the behavior).

How to call a constructor explicitly if we want to allocate memory
using malloc ?



使用placement new (查阅)。


V

-

请在回复e时删除资金'A' -mail

我没有回复最热门的回复,请不要问

Use "placement new" (look it up).

V
--
Please remove capital ''A''s when replying by e-mail
I do not respond to top-posted replies, please don''t ask




shsingh写道:

shsingh wrote:

我有一个包含一些地图作为数据变量的A类。我通过使用malloc分配内存来在堆上创建类A的

对象。这个

将返回我所需的内存,但是对象没有被初始化

正确,因为构造函数不会被调用(根据行为)。


如果我们想使用malloc分配内存

,如何显式调用构造函数?
I have a class A containing some map as data variables. I creat an
object of class A on heap by allocatiing memory by using "malloc". This
will return me the required memory but the object is not initialized
properly as constructor same is not get called ( as per the behavior).

How to call a constructor explicitly if we want to allocate memory
using malloc ?



你可以使用新的位置。


buffer = malloc(/*...*/);

object = new(buffer)MyClass(/*...*/);


但是后来你也必须明确地调用析构函数:


object-> ~MyClass();

免费(缓冲区);


问候,

Bart。

You can use placement new.

buffer = malloc(/*...*/);
object = new (buffer) MyClass(/*...*/);

But later you have to call the destructor explicitly too:

object->~MyClass();
free(buffer);

Regards,
Bart.