У меня вопрос о пользовательском преобразовании.C++ Определенное пользователем преобразование - неявное преобразование
class String {
char* m_data;
public:
String(): m_data(NULL) {}
String(const char* cstr): m_data(new char[strlen(cstr)+1]) {
strcpy(m_data, cstr);
}
~String() {
delete[] m_data;
}
String& operator=(const char* cstr) {
delete[] m_data;
m_data = new char[strlen(cstr)+1];
strcpy(m_data, cstr);
return *this;
}
operator const char*() const {
return m_data;
}
};
В то время как это работает:
int main(int argc, char** argv) {
String a;
String b;
a = "aaa";
b = (const char *)a;
return 0;
}
Это не:
int main(int argc, char** argv) {
String a;
String b;
a = "aaa";
b = a;
return 0;
}
я получаю сообщение об ошибке выполнения double free or corruption
. Valgrind говорит о некорректном удалении.
Почему я должен явно указывать его? Я думал, что так будет работать с explicit operator const char*()
. Я делаю что-то неправильно?
http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three – 0x499602D2
Короче говоря: оператор присваивания 'String & operator = (const String & other)' отсутствует. – haavee