ホームページ >バックエンド開発 >C++ >C 構造体の std::strings で Malloc を使用できないのはなぜですか?

C 構造体の std::strings で Malloc を使用できないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-18 19:46:02964ブラウズ

Why Can't I Use Malloc with std::strings in C   Structures?

C 構造体での Malloc と std::Strings の使用

std:: を含む構造体を使用しようとすると、一般的な問題が発生しました。 malloc() を使用して動的メモリ割り当てを行う文字列。この問題は、C のオブジェクト構築とメモリ管理の複雑さに起因します。

Malloc の問題

Malloc は生のメモリを割り当て、初期化されていない領域のブロックを作成します。ただし、std::string などの自明ではないコンストラクターを持つオブジェクトに malloc を使用すると、オブジェクトを適切に初期化するためのコンストラクターが呼び出されないため、問題が発生します。

Malloc の代わりに New を使用する

解決策は、malloc の代わりに C 演算子 new を使用することです。 New は、新しいオブジェクトを作成し、そのコンストラクターを呼び出して、適切な初期化を保証します。あなたの場合、以下を使用できます:

example *ex = new example;

Raw メモリに Placement New を使用する

特に malloc を使用する必要がある場合は、malloc を使用して raw メモリを割り当てることができます。次に、配置 new を使用して、そのメモリ内にオブジェクトを構築します。

void *ex_raw = malloc(sizeof(example));
example *ex = new(ex_raw) example;

ただし、このシナリオでは、new を直接使用することをお勧めします。

以上がC 構造体の std::strings で Malloc を使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。