好的,假设我有一些随机的抽象基类Base
,并且我有一个Foo
包含指向该基类的指针作为数据成员的类。所以
class Foo
{
public:
Foo(Base*);
private:
Base* ptr;
}
现在我使用指向基类的指针的原因是因为我希望能够选择我的Foo
对象具有指向哪个派生类。现在,对我来说,棘手的部分是Foo
.
如果我这样做
Foo::Foo(Base* _ptr)
{
Foo::ptr = _ptr;
};
用户可以调整指向的对象,Foo::ptr
因为_ptr
在构造函数完成后仍然存在。我无法使_ptr
常量指向的对象,因为Foo::ptr
需要定期更新自身。现在我正在考虑_ptr = NULL
在构造函数的末尾添加一行,但这也可能很危险,因为用户可以尝试取消引用_ptr
.
我能想到的唯一方法是复制所指向的对象_ptr
并初始化Foo::ptr
该副本的地址。但是然后指向的对象_ptr
需要有一个成员函数Clone()
或类似的东西,因为我不能为一个我在编译时不知道类的对象调用复制构造函数。
那么如果没有的话,有什么优雅的方法可以做到这一点Clone()
吗?或者这真的是唯一的可能性吗?