gpt4 book ai didi

c++ - 使用本地数组作为存储时,带有 std 字符串参数的模板类会出现段错误

转载 作者:行者123 更新时间:2023-11-30 03:13:19 34 4
gpt4 key购买 nike

这是程序


using namespace std;

template <typename T>
class Test
{
public:
struct Node{
T data;
Node *next;
};

void setData(T data)
{
head = reinterpret_cast<Node*>(storage);
head->data = data;
}
private:
unsigned char storage[2048];
Node* head;
};

int main()
{
Test<std::string> test;
test.setData("Hello");
return 0;
}

当参数是 int 类型时,上面的程序编译并且也能正常工作。但是当我将参数设置为 std::string 时它崩溃了 - head->data = data;

这是我必须明确处理 std::string 的事情吗?

提前致谢。

最佳答案

您告诉编译器将数组 storage 视为 Node 结构。但是 storage 中的数据没有以任何方式初始化,它的内容不确定并且以任何方式使用它都会导致未定义的行为

更具体地说,“结构”的成员没有构造或初始化,因此尝试将成员 data 用于任何复杂的事情(如您的情况)很可能会导致崩溃。

简单的解决方案是使用placement new

head = new (storage) Node;

注意放置new后不能delete对象,需要显式调用析构函数

head->~Node();

关于c++ - 使用本地数组作为存储时,带有 std 字符串参数的模板类会出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58762592/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com