我是C++的新手,刚读书读书。 所以这个问题可能有点愚蠢。 这里是我的程序:模拟一个虚拟拷贝构造函数
#include <iostream>
using namespace std;
class Fish
{
public:
virtual Fish* Clone() = 0;
};
class Tuna : public Fish
{
public:
Tuna(const Tuna& SourceTuna)
{
cout << "Copy Constructor of Tuna invoked" << endl;
}
Tuna* Clone()
{
return new Tuna(*this);
}
};
我有
问题return new Tuna(*this);
首先,为什么拷贝构造函数返回金枪鱼的指针? 通常,调用复制构造函数将直接返回一个复制的实例。 例如:
class Student
{
public:
Student(){}
Student(const Student& Input) { cout << "Copy Ctor Invoked\n"; }
};
int main()
{
Student a;
Student b(a);
return 0;
}
此基础上我的理解,是什么Student b(a);
确实是抄袭的实例,并命名为b
。 那么为什么new Tuna(*this)
不是返回一个实例而不是一个指针?
二,为什么是这个点,即。 *this
,在参数中提供? 根据我的理解,this
是一个指向当前对象的指针,这意味着*this
是一个指向当前对象指针的指针。我尝试使用int
来模拟这种情况。
// The input argument is the same as a copy constructor
int SimulateCopyConstructor(const int& Input){ return 0; }
void main()
{
int a = 10; // a simulate an object
int* b = &a; // b is a pointer of object a, which simulate "this"
int** c = &b; // c is a pointer to pointer of object a, which simulate of "*this"
SimulateCopyConstructor(a); // It can compile
SimulateCopyConstructor(b); // cannot compile
SimulateCopyConstructor(c); // cannot compile
}
我觉得发送(*this)
复制构造函数类似于上面的情况c。但它不编译。那么它是如何工作的?
'* this'正在引用'this'指针来获取对象,它不会创建指向指针的指针。 'clone'不是一个拷贝构造函数,它是一个常规的成员函数。由于在将基类返回多态对象时发生切片问题,因此它返回指针。 '克隆'也设计得不好,至少应该返回'unique_ptr'。 – nwp
在网上搜索“C++ factory design”和“C++ double delegation”以获取更多示例。 –
@nwp谢谢。 '* this'正在引用'this'指针来获取对象。 这个数字我忽略了什么。 使用上面的例子。 'SimulateCopyConstructor(* b);'模拟情况。 – tom