- 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;
}
плюсы без плюсов
mailwl 09.10.2015 20:48 # 0
gost 09.10.2015 21:12 # +1
Dummy00001 09.10.2015 21:43 # 0
несколько раз в С++ приходилось `std::string` в `char*` переводить потому что динамическая память ставила все на колени, и ее с std::string никак не избежать.
но и несколько раз С проекты на С++ перетаскивал, только для того что бы с помощью std::string обработку строк хотя бы кое как в человеческий вид привести.
mailwl 09.10.2015 22:06 # 0
absolut 10.10.2015 08:25 # 0
По ГК могу добавить, что имеем проёб строки, если присваиваем самому себе. Ну, и будь член Name нормальной std:: строкой писать оператор присваивания, а равно как и копиконструктор с деструктором, надобности бы не возникло.
Меньше кода - меньше багов.
mailwl 10.10.2015 08:53 # 0
Dummy00001 10.10.2015 10:50 # +1
я когда под пивом дома пишу, ведущий принцип это "меньше думаешь - меньше думаешь."
absolut 10.10.2015 08:48 # +1
Dummy00001 10.10.2015 10:53 # 0
absolut 10.10.2015 11:21 # +2
Dummy00001 10.10.2015 11:31 # −2
в этом как бы и был вопрос.
судя по списку конструкторов - http://www.cplusplus.com/reference/string/basic_string/basic_string/ - ничего не изменилось, и присвоение все еще надо делать с помощью `a.assign( b.begin(), b.end() );` или подобного.
я на одном проекте пытался с альтернативным алокатором работать, но вот из-за таких граблей это было просто непрактично.
absolut 10.10.2015 13:05 # 0
В Стандарте нет, но есть в бусте.
Dummy00001 10.10.2015 13:29 # 0
> > 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.
это совсем для других целей народ делает.
вообщем проще пока не заморачиватся.
roman-kashitsyn 12.10.2015 10:25 # 0
Можно ещё замутить small string optimization, правда, придётся велосипедить строку. Или брать какой-нибудь fbstring
Dummy00001 09.10.2015 21:38 # +2
называются кресты. С××!
Dummy00001 09.10.2015 21:49 # +1
guest 09.10.2015 21:54 # +4
guest 09.10.2015 21:56 # +6
HiNeX 10.10.2015 06:21 # +3
1024-- 10.10.2015 17:34 # +3
CHayT 10.10.2015 20:25 # +2
inkanus-gray 10.10.2015 20:59 # 0
bormand 10.10.2015 20:27 # +1
3_14dar 10.10.2015 22:00 # +2
gost 11.10.2015 22:39 # 0
bormand 11.10.2015 23:21 # 0
gost 11.10.2015 23:30 # +2
3_14dar 12.10.2015 00:44 # +3
CHayT 12.10.2015 08:41 # 0
CHayT 12.10.2015 08:41 # 0
CHayT 12.10.2015 08:42 # 0
gost 12.10.2015 09:38 # 0