C++ 深压顶c++;-如果给定了指向某个类的指针,则创建该类的副本

C++ 深压顶c++;-如果给定了指向某个类的指针,则创建该类的副本,c++,constructor,copy,C++,Constructor,Copy,我对复制构造函数的概念还不熟悉。我有一个基本的问题。 想要实现这样的功能 orig *f1(orig*o) { // Returns a copy of *0 and should deep copy all the values of the parent // pointer.Planning to implement a copy constructor to achieve the same. // Can anyone provide a prototype or some

我对复制构造函数的概念还不熟悉。我有一个基本的问题。 想要实现这样的功能

orig *f1(orig*o)
{
  // Returns a copy of *0 and should deep copy all the values of the parent
  // pointer.Planning to implement a copy constructor to achieve the same.
  // Can anyone provide a prototype or some idea on the same?
}
class dummyclass
{
 int value;
};
class orig
{
  dummyclass *dummy;
  char str[100];
public:
 //default constructor
:
//parametrised constructor
 orig(char *p)
{
   dummy = new dummyclass;
  //rest of the initialisation
}
orig(const orig& duplicate)
{
//copy constructor
}
};
int main()
{
  orig o("Hello");//constructor
  orig dup(o);//copy constructor
   }

我知道通过这种方式我们可以调用复制构造函数。但如果给出了指向o ie*o的指针,则如何调用复制构造函数并进行深度复制。

然后取消引用
o

orig* o = new orig("Hello");
orig dup(*o);

如果需要,您可以根据Mark Garcia的回答调用复制构造函数。您可以从指针创建一个构造函数-它应该做复制构造函数也应该做的事情-
dummy=newdummyclass(p->dummy);复制(str,p->str,p->str+100)。您需要一个析构函数来
删除虚拟对象
。在
dummyclass
上使用
clone()
函数是一种更结构化的方法,但是对于一个
int
成员来说,过度杀戮。@实际上,TonyD在这里使用指针已经过度杀戮了。所以基本上我可以这样做orig f1(origo){orig dup(*o);return*dup;}…此外,如果我们有一个复制构造函数,是否需要重载赋值运算符?您可以这样做,但其返回值应该是一个动态分配的变量(否则它只返回一个指向不存在对象的指针)。你的意思是在复制构造函数中,我应该执行dup=new orig并复制每个值?不。我的意思是在函数
f1
中,你应该这样做:
orig*dup=new orig(*o);返回dup好的。如果我有一个类,它有一个指针,这个指针是由其他类动态创建和拥有的,那么副本必须是深的吗?