我的心智模型有什么问题

What is wrong with my mental model?

本文关键字:什么 问题 模型 我的心      更新时间:2023-10-16

为什么会这样...

string str("special_string");
string arr[10];
arr[0] = str;

虽然这会导致赛格故障?

string str("special_string");
string *buf = (string*)malloc(sizeof(string) * 10);
buf[0] = str; /* or *buf = str; */

这两个实例不是按值复制吗?

虽然这会导致赛格故障?

因为你在这里有一个问题:

string *buf = (string*)malloc(sizeof(string));

您只分配内存,但不能正确初始化类型 std::string 的对象,因为malloc()不会调用 CTR。如果您改用operator new则代码将起作用:

string str("special_string");
string *buf = new string;
*buf = str;

当然,当您需要销毁该对象时,您应该使用delete而不是free()