Поскольку вы просто создаете другой указатель на такой же объект, а не новый объект:
foo* objOne = new foo;
foo* objTwo = objOne;
^
|
+-- these are pointers.
Если вы хотите новый объект, используйтечто-то вроде:
foo objTwo = objOne;
и исправьте ваш конструктор копирования:
foo (const foo &obj) ...
Следующий фрагмент кода показывает один из способов сделать это:
#include <iostream>
class foo {
public:
foo () {
std::cout << "constructor" << std::endl;
ptr = new int;
*ptr = 10;
}
foo (const foo &obj) {
std::cout << "copy constructor" << std::endl;
ptr = new int;
*(this->ptr) = *(obj.ptr);
}
~foo () {
delete ptr;
}
private:
int* ptr;
};
int main()
{
foo objOne;
foo objTwo = objOne ;
return 0;
}
И это выводит:
constructor
copy constructor
, как и следовало ожидать.