У меня есть следующий код, чтобы проверить мое понимание основных указателей в С++:
// Integer.cpp
#include "Integer.h"
Integer::Integer()
{
value = new int;
*value = 0;
}
Integer::Integer( int intVal )
{
value = new int;
*value = intVal;
}
Integer::~Integer()
{
delete value;
}
Integer::Integer(const Integer &rhInt)
{
value = new int;
*value = *rhInt.value;
}
int Integer::getInteger() const
{
return *value;
}
void Integer::setInteger( int newInteger )
{
*value = newInteger;
}
Integer& Integer::operator=( const Integer& rhInt )
{
*value = *rhInt.value;
return *this;
}
// IntegerTest.cpp
#include <iostream>
#include <cstdlib>
#include "Integer.h"
using namespace std;
void displayInteger( char* str, Integer intObj )
{
cout << str << " is " << intObj.getInteger() << endl;
}
int main( int argc, char* argv[] )
{
Integer intVal1;
Integer intVal2(10);
displayInteger( "intVal1", intVal1 );
displayInteger( "intVal2", intVal2 );
intVal1 = intVal2;
displayInteger( "intVal1", intVal1 );
return EXIT_SUCCESS;
}
Этот код работает точно так, как ожидалось, он печатает:
intVal1 is 0
intVal2 is 10
intVal1 is 10
Однако, если я удалю конструктор копирования, он выведет что-то вроде:
intVal1 is 0
intVal2 is 10
intVal1 is 6705152
Я не понимаю, почему это так. Я понимаю, что конструктор копирования используется, когда присваивание относится к объекту, который не существует. Здесь intVal1
существует, поэтому почему оператор присваивания не называется?