遍在する new および delete 式とは対照的に、std::malloc は独特の動作を示します。メモリ割り当て時にオブジェクトのコンストラクターを自動的に呼び出しません。ここで疑問が生じます: コンストラクターの呼び出しを保証しながら、malloc を使用してオブジェクトを作成するにはどうすればよいでしょうか?
答え:
推奨される直感的なアプローチは、 new 演算子を利用することです。これは本質的にメモリ割り当てとコンストラクター呼び出しの両方を処理します。あるいは、明示的なコンストラクター呼び出しを使用する手法である「placement new」を通じてコンストラクターを手動で呼び出すこともできます。
次のコード スニペットは、placement new の使用法を示しています。
<code class="cpp">A* a = (A*)malloc(sizeof(A)); new (a) A();</code>
ここで、ポインター a はサイズ sizeof(A) の割り当てられたメモリーを指し、その後、配置 new 式 new (a) A() がそのメモリー位置に A オブジェクトを構築します。
オブジェクトが不要になったら、手動でデストラクターを呼び出し、割り当てられたメモリを解放します。
<code class="cpp">a->~A(); free(a);</code>
禁止する特定の状況がない限り、通常、新しい配置は使用されないことに注意することが重要です。 new と delete の使用。
以上がmalloc を使用してオブジェクトを作成し、コンストラクターを確実に呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。