Я практикую реализацию класса 'String' (C ++) в Visual Studio 2015. У меня в классе 3 конструктора, а не оператор присваивания.
String();
String(char _c);
String(const char* _pc);
В main()
я намеренно используюоператор присваивания для проверки поведения кода.
К моему удивлению, он не выдает никакой ошибки и использует конструктор String(const char* _pc)
для присвоения значения объекту.Кроме того, в конце области он дважды вызывает деструктор.
Что в этом случае делает компилятор за кулисами?а почему?
Вот мой код:
class String {
private:
int capacity;
char* start;
public:
//Constructors
String();
String(const char* _pc);
//Destructor
~String();
}
String::String() :start(nullptr), capacity(0) {}
String::String(const char* _pc) :capacity(1) {
const char* buffer = _pc;
while (*(buffer++))
capacity++;
int temp_capacity = capacity;
if (temp_capacity)
start = new char[temp_capacity];
while (temp_capacity--) {
start[temp_capacity] = *(--buffer);
}
}
String::~String() {
if (capacity == 1)
delete start;
if (capacity > 1)
delete[] start;
}
int main() {
String s;
s="Hello World";
return 0;
}