我有一个问题,我想复制一个对象,但又想避免对其进行切片。
DerivedObj derivedObj;
myFunc(derivedObj);
void myFunc(MyObj &obj)
{
MyObj *saveForLater = new MyObj(obj); // slices my object
// ... //
}
有没有办法解决这个问题?我确实需要制作一个副本,因为原始对象在需要之前已经离开了范围。
我有一个问题,我想复制一个对象,但又想避免对其进行切片。
DerivedObj derivedObj;
myFunc(derivedObj);
void myFunc(MyObj &obj)
{
MyObj *saveForLater = new MyObj(obj); // slices my object
// ... //
}
有没有办法解决这个问题?我确实需要制作一个副本,因为原始对象在需要之前已经离开了范围。
如果您的约束条件允许,您可以添加一个虚拟Clone
方法。
class MyObj
{
public:
virtual MyObj* Clone() const = 0;
};
class DerivedObj : public MyObj
{
public:
virtual MyObj* Clone() const
{
return new DerivedObj(*this);
}
};
void myFunc(MyObj &obj)
{
MyObj *saveForLater = obj.Clone();
// ... //
}