Я поместил это в комментарии выше, но только для того, чтобы сделать код читабельным:
std::string a = "Hello.";
std::string b;
b = a.c_str(); // makes an actual copy of the string
b = a; // makes a copy of the pointer and increments the reference count
Так что, если вы действительно хотите имитировать поведение strcpy
, вам нужно скопировать его с помощью c_str()
;
UPDATE
Следует отметить, что стандарт C ++ 11 явно запрещает общий шаблон копирования при записи, который ранее использовался во многих реализациях std::string
. Таким образом, строки подсчета ссылок больше не разрешены, и следующее создаст копию:
std::string a = "Hello.";
std::string b;
b = a; // C++11 forces this to be a copy as well