- 1
- 2
- 3
- 4
- 5
- 6
T& T::operator =(const T& that)
{
delete[] Name;
Name = that.Name ? strcpy(new char[strlen(that.Name) + 1], that.Name) : 0;
return *this;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+3
T& T::operator =(const T& that)
{
delete[] Name;
Name = that.Name ? strcpy(new char[strlen(that.Name) + 1], that.Name) : 0;
return *this;
}
плюсы без плюсов
несколько раз в С++ приходилось `std::string` в `char*` переводить потому что динамическая память ставила все на колени, и ее с std::string никак не избежать.
но и несколько раз С проекты на С++ перетаскивал, только для того что бы с помощью std::string обработку строк хотя бы кое как в человеческий вид привести.
По ГК могу добавить, что имеем проёб строки, если присваиваем самому себе. Ну, и будь член Name нормальной std:: строкой писать оператор присваивания, а равно как и копиконструктор с деструктором, надобности бы не возникло.
Меньше кода - меньше багов.
я когда под пивом дома пишу, ведущий принцип это "меньше думаешь - меньше думаешь."
в этом как бы и был вопрос.
судя по списку конструкторов - http://www.cplusplus.com/reference/string/basic_string/basic_string/ - ничего не изменилось, и присвоение все еще надо делать с помощью `a.assign( b.begin(), b.end() );` или подобного.
я на одном проекте пытался с альтернативным алокатором работать, но вот из-за таких граблей это было просто непрактично.
В Стандарте нет, но есть в бусте.
> > What you need is an intermediate type that is implicitly constructable from both std::string and your allocator string.
блин, но это же для каждого stl'ного класса надо делать.
читая дальше:
> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3334.html#classstd_1_1basic__string__re f
> > It is expected that user-defined string-like types will define an implicit conversion to string_ref (or another appropriate instance of basic_string_ref) to interoperate with functions that need to read strings.
это совсем для других целей народ делает.
вообщем проще пока не заморачиватся.
Можно ещё замутить small string optimization, правда, придётся велосипедить строку. Или брать какой-нибудь fbstring
называются кресты. С××!