Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Новый стандарт с тобой не согласится. Чтобы полноценно использовать возможности rvalue-references как раз нужно, чтобы возвращался неконстантный объект.
Да и при текущем стандарте возврат константного значения убивает некоторые потенциальные оптимизации
можно было обойтись только последним оператором, так как при сложении с const char автоматически вызовется конструктор который преобразует его в MYCString
Можно, но видимо индусы посчитали, что 3 перегруженых оператора сложения лучше чем 1.)
Класс строки вообще зачетный. В этом же классе под деструктором стоит комент, в котором пейсатель сего класса говорит, что он сделал деструктор невиртуальным, чтоб избежать создания таблицы виртуальных методов и поэтому использовать сей класс надо с осторожностью, так как много других классов наследуются от данного. Всё бы ничего, но в этом классе вообще нет виртуальных методов, и виртуальный деструктор просто нафиг не нужен.
>в этом классе вообще нет виртуальных методов, и >виртуальный деструктор просто нафиг не нужен.
ошибаешься
Виртуальный деструктор нужен, если объекты удаляются через указатель на базовай объект
Хорошее правило - если от класса будут наследоваться, в нем нужен виртуальный деструктор
Что хотел сказать индус (предположение) - не удаляйте эти объекты через указатели не родительские. А от виртуального деструктора отказался в пользу эффективности (взяв пример со стандартной библиотеки, например)
Да не, для операторов все то же самое. Я в прошлом посте сначала написал про explicit, потом уже увидел, что про него уже написали. "глюк" подразумевал, что мой пост им является. 🙂
a+b = c;
Да и при текущем стандарте возврат константного значения убивает некоторые потенциальные оптимизации
1)Можно на ссылочки пофапать поглядеть?
2)Какие оптимизации это убивает?
2) Убивается возможность copy elision.
Очень нестандартное утверждение... %) Нужно поразбираться...
Класс строки вообще зачетный. В этом же классе под деструктором стоит комент, в котором пейсатель сего класса говорит, что он сделал деструктор невиртуальным, чтоб избежать создания таблицы виртуальных методов и поэтому использовать сей класс надо с осторожностью, так как много других классов наследуются от данного. Всё бы ничего, но в этом классе вообще нет виртуальных методов, и виртуальный деструктор просто нафиг не нужен.
ошибаешься
Виртуальный деструктор нужен, если объекты удаляются через указатель на базовай объект
Хорошее правило - если от класса будут наследоваться, в нем нужен виртуальный деструктор
Что хотел сказать индус (предположение) - не удаляйте эти объекты через указатели не родительские. А от виртуального деструктора отказался в пользу эффективности (взяв пример со стандартной библиотеки, например)
если должен и помечен, значит последним оператором уже не обойтись...
MYCString a("string1");
a = a + MYCString("string2");
а вот так уже нет:
MYCString a("string1");
a = a + "string2";
class Vector
{
Vector( float x ){}
Vector& operator = (const Vector& other)
{
}
} vec;
такая строка будет работать
vec = 3.0f;
А зачем ? Создавался в доSTLевскую эру или почему ?