我需要传递一个指向类的指针,所以我无法控制一些代码。这段代码完成后会自动释放()指针,但我稍后需要这个类。我希望我可以创建一个“包装器”类,以防止该类被释放,而不会真正阻止代码访问它,但虚拟调用不起作用。
template <class T>
class PointerWrapper:public T
{
public:
T* p;
PointerWrapper(T *ptr)
{
p=ptr;
}
~PointerWrapper(void)
{
}
T* operator->() const
{
return p;
}
T& operator*() const
{
return *p;
}
};
void codeIDontControl(Example *ex)
{
ex->virtualfunction();
delete ex;
}
void myCode()
{
Example *ex=new Example();
codeIDontControl(ex);
do something with ex //doesn't work because ex has been freed
codeIDontControl(new PointerWrapper<Example>(ex));
do something with ex //ex hasn't been freed, but the changes made to it via
// Example::virtualfunction() in codeIDontControl() aren't there anymore
}
基本上,ex->virtualfunction() 调用的是 PointerWrapper 本身中的虚函数,而不是 PointerWrapper->p 中的虚函数。似乎它忽略了 -> 运算符?
现在,如果有不同的方法可以做到这一点,我不需要使用 PointerWrapper 类,但这是我能想到的全部......
我也不能修改示例,但我可以将其子类化