下面的代码段在linux上运行,并报告分段错误(核心转储)。我发现调用析构函数时发生错误,但无法弄清楚原因。有人可以帮忙解释一下吗?
class TStringPair{
public:
TStringPair(){
memset(this, 0, sizeof(TStringPair));
}
string a;
string b;
};
int main (int argc, char* argv[])
{
TStringPair test;
return 0;
}
最佳答案
该memset
确实毁了类。 std::string
(以及许多其他C++类)的内存不应填充零,而应同时填充两个。
为了说明为什么这是一个坏主意,请考虑一个具有指向实际字符的指针的std::string
。糟糕,它现在指向0而不是指向空字符串。将非C对象清零的其他原因也很糟糕,但是它们与本示例的相关性并不高。
我想去掉memset
而不放任何东西会得到您想要的确切结果。