我不明白为什么在这种情况下不会调用复制构造函数。有人可以解释一下吗?
#include <iostream>
class foo
{
int* ptr;
public:
foo()
{
std::cout << "\n Constructor \n" ;
ptr = new int;
*ptr = 10;
}
foo( const foo* &obj ) // Copy Constructor
{
std::cout << "\n Copy Constructor \n" ;
ptr = new int;
*(this->ptr) = *(obj->ptr);
}
// Copy Assignment Operator
~foo() // Destructor
{
delete ptr;
}
};
int main()
{
foo* objOne = new foo;
foo* objTwo = objOne ;
getchar();
return 0;
}
答案 0 :(得分:9)
因为您只是为相同的对象创建另一个指针,而不是新对象:
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
正如您所料。
答案 1 :(得分:3)
foo( const foo* &obj )
不是复制构造函数
foo( const foo &obj )
是
此外,您正在复制对象指针,而不是对象。您无法为对象指针定义复制构造函数。 C ++中通常的解决方案是创建一个包装指针的智能指针类。见:
答案 2 :(得分:2)
您正在将POINTER复制到对象,而不是对象。因此,没有复制构造函数调用 - 您只是将objTwo指定为与objOne相同的地址。
答案 3 :(得分:0)
只是一个想法,尝试这样称呼:
foo* objTwo(objOne);
答案 4 :(得分:0)
复制构造函数将引用作为参数传递给const对象。
答案 5 :(得分:0)
复制构造函数的签名错误...
它不能是指针......
foo( const foo &obj )