有时,当一个对象用另一个对象的指针创建时,这意味着它负责销毁另一个对象,而不是其他对象。有时甚至有些情况可能因情况而异,而不是每个班级固定的规则。是否有描述哪个对象控制另一个对象的生命周期的模式?
很简单的例子:
class A
{
private:
B *b;
public:
A(B *_b)
{
if(_b)b = _b; //A should NOT destroy b
else b = new B(); //A should destroy b
}
}
在A::~A()
你那么最终需要知道。当然你可以有一个小布尔标志,但我想知道这里有没有使用得很好的模式?或者甚至可以将这种行为的名称放在代码注释中,以便其他开发人员可以获得更多的线索?
我宁愿将它称为反模式。一个对象应该拥有另一个对象(必要时显式转移所有权),或者不拥有它(然后根本不删除它)。你的例子意味着类“A”的对象根据它们被初始化的方式表现不同,这对用户来说是令人惊讶的。 – Philipp 2012-03-03 18:04:22
但是,传递NULL来表示一个类应该使用默认实现,IS通用。 – 2012-03-03 18:08:35