在我的代码中,我希望boost :: shared_ptr不要调用delete但是调用ptr-> deleteMe()代替.
我还有一些C风格的函数返回一个ptr.我可以调用lib_freeXYZ(ptr); 而不是试图删除?
我试图通过将引用传递给指针而不是指向指针的指针来回答这里提到的问题,如下所示:
class Parent
{
};
class Child : public Parent
{
};
void RemoveObj(Parent*& pObj)
{
delete pObj;
pObj = NULL;
}
int main()
{
Parent* pPObj = new Parent;
Child* pCObj = new Child;
pPObj = new Parent();
pCObj = new Child();
RemoveObj(pPObj);
RemoveObj(pCObj); // This is line 32
return 1;
}
Run Code Online (Sandbox Code Playgroud)
但是这会在第32行产生以下编译器错误:
错误C2664:'RemoveObj':无法将参数1从'Child*'转换为'Parent*&'
我同意不允许从Child**转换为Parent**.但为什么这种转换也不允许?