我新建了一个字符串类,然后通过memcpy复制到另一个字符串类, 当我从另一个字符串类中删除它时它崩溃了。 有人可以帮忙解释一下吗? 谢谢
union Data {
bool _bool;
int16_t _int16;
int32_t _int32;
int64_t _int64;
uint16_t _uint16;
uint32_t _uint32;
uint64_t _uint64;
float _float;
double _double;
char s[sizeof(std::string)];
} ;
int main(int argc, char *argv[])
{
Data d1;
new(d1.s) std::string("123");
Data d2;
memcpy(d2.s, d1.s, sizeof(d1.s));
void *p2 = d2.s;
auto delStr2 = reinterpret_cast<std::string *>(p2);
void *p1 = d1.s;
auto delStr1 = reinterpret_cast<std::string *>(p1);
delStr2->~basic_string(); //crashed
}
最佳答案
std::string
不是 trivially copyable type ,使用 memcpy
复制它会导致未定义的行为。
关于c++ - 删除通过 memcpy 从字符串类复制的字符串时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58518704/