C++ での基本的なポインターの理解をテストする次のコードがあります。
// 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
なぜそうなのかわかりません。私の理解では、割り当てが存在しないオブジェクトに対するものである場合、コピー コンストラクターが使用されます。hereintVal1
が存在するのに、代入演算子が呼び出されないのはなぜですか?