Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
585 views
in Technique[技术] by (71.8m points)

c++ - Can I pass a pointer to a superclass, but create a copy of the child?

I have a function that takes a pointer to a superclass and performs operations on it. However, at some point, the function must make a deep copy of the inputted object. Is there any way I can perform such a copy?

It occurred to me to make the function a template function and simply have the user pass the type, but I hold out hope that C++ offers a more elegant solution.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

SpaceCowboy proposes the idiomatic clone method, but overlooked 3 crucial details:

class Super
{
public:
  virtual Super* clone() const { return new Super(*this); }
};

class Child: public Super
{
public:
  virtual Child* clone() const { return new Child(*this); }
};
  1. clone is a const method
  2. clone returns a pointer to the current class, not the base class
  3. clone returns a copy of the current object

The 2nd is very important, because it allows use to benefit from the fact that sometimes you have more type information than just a Super*.

Also, I usually prefer clone to provide a copy, and not merely a new object of the same type. Otherwise you're using an Exemplar pattern to build new objects, but you're not cloning proper and the name is misleading.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...