【发布时间】:2015-12-11 07:57:30
【问题描述】:
我有一堂课,我们称之为A。 A 类有两个子类a 和b。
我正在像这样创建A 类的指针:
A *pointer;
在程序的某个时刻,我像这样初始化指针:
pointer = new a();
在其他时候,我运行了 A 类的函数:
pointer->function(&pointer);
这个函数在A类里面(所以所有的子类都有它)。有可能在调用此函数时,我想将指针更改为另一个子类,这是我尝试过的:
void A::function(A **pointer)
{
if (something)
{
delete *pointer;
*pointer = new b();
}
}
虽然这可行,但我真的很好奇这是否是一种好的做法,我从对象内部调用 delete 并释放对象本身,这可能是未定义的行为,我很幸运它有效吗?我不明白这一点吗?我是否让这变得比应有的复杂?
【问题讨论】:
-
如果函数使用
*this的某些成员被删除后,你将陷入困境。如果不是,为什么是成员函数? -
同时我建议您将函数更改为
A* A::function(const A& obj) { ... return new b(); },并确保旧对象自动销毁(例如使用智能指针)。 -
@Petr 我想到了这个,问题是
function运行了很多次,它很少改变pointer。如果我让function返回指向新对象的指针,我应该一直比较它是否返回NULL或不对? -
@TomTsagk,在所有其他情况下只返回
this。我现在正在写一个扩展版本作为答案。