首页 >后端开发 >C++ >为什么我不能在 C 结构中将 Malloc 与 std::strings 一起使用?

为什么我不能在 C 结构中将 Malloc 与 std::strings 一起使用?

Linda Hamilton
Linda Hamilton原创
2024-11-18 19:46:02955浏览

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

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn