在 C 结构中使用 Malloc 和 std::Strings
您在尝试使用包含 std:: 的结构时遇到了一个常见问题:使用 malloc() 进行动态内存分配的字符串。这个问题源于 C 中对象构造和内存管理的复杂性。
Malloc 的问题
Malloc 分配原始内存,创建未初始化的空间块。但是,对具有重要构造函数的对象(例如 std::string)使用 malloc 是有问题的,因为它不会调用构造函数来正确初始化对象。
使用 New 而不是 Malloc
解决方案是使用 C 运算符 new 而不是 malloc。 New 创建一个新对象并调用其构造函数,确保正确的初始化。在您的情况下,您可以使用:
example *ex = new example;
使用新的放置原始内存
如果您特别需要使用malloc,您可以使用malloc分配原始内存然后使用placement new在该内存中构造对象:
void *ex_raw = malloc(sizeof(example)); example *ex = new(ex_raw) example;
但是,在这种情况下,直接使用new是首选方法。
以上是为什么我不能在 C 结构中将 Malloc 与 std::strings 一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!