String的赋值

今天看到代码里有一段这样的操作:

1
2
3
4
5
6
7
8
int getline(std::string &str, FILE *fp) {
char *buf = reinterpret_cast<char *>(malloc(2048));
//something
str = buf;

free(buf);
buf = NULL;
return str.length();

第一反应是这句str = buf不是把buf的指针赋给str,然后free不是啥都没了吗?后来仔细看了看,其实std::string的赋值操作符是重载的,有一个定义是:

1
string& operator= (const char* s);

buf是直接把内容赋给了str,和指针无关了。