Home > Article > Backend Development > How can I create an object using malloc and ensure constructor invocation?
In contrast to the ubiquitous new and delete expressions, std::malloc presents a unique behavior: it does not automatically invoke an object's constructor upon memory allocation. This raises the question: how can we create an object using malloc while ensuring constructor invocation?
Answer:
The recommended and intuitive approach is to utilize the new operator, which inherently handles both memory allocation and constructor invocation. Alternatively, we can manually invoke the constructor through "placement new," a technique that employs explicit constructor calls.
The following code snippet illustrates the use of placement new:
<code class="cpp">A* a = (A*)malloc(sizeof(A)); new (a) A();</code>
Here, the pointer a points to allocated memory of size sizeof(A), and the placement new expression new (a) A() subsequently constructs an A object at that memory location.
When the object is no longer needed, we manually call the destructor and free the allocated memory:
<code class="cpp">a->~A(); free(a);</code>
It is important to note that placement new is typically not employed unless there are specific circumstances that prohibit the use of new and delete.
The above is the detailed content of How can I create an object using malloc and ensure constructor invocation?. For more information, please follow other related articles on the PHP Chinese website!