- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
MYCString myexport
operator+(const MYCString& s, const char* pstr)
{
return MYCString(s, pstr); // Use the special concatenation constructor
}
MYCString myexport
operator+(const char* c, const MYCString& s)
{
return MYCString(c) + s.data();
}
MYCString myexport
operator+(const MYCString& a, const MYCString& s)
{
return a + s.data();
}
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евскую эру или почему ?