说我有一个具有Initialize()方法的类型A的对象。 该方法接收对象B,这些对象保留为对象数据成员。 B对象在多个对象之间共享,因此A应该包含最初接收的B对象而不是其副本。通过引用或指针共享对象
class A
{
public:
bool Initialize(B?? b);
private:
B?? m_B;
}
对象B必须存在。因此,我认为通过引用传递它,而不是传递指针,如果B为NULL,则失败Initialize()。
m_B的唯一代名词是指针B的类型(它不能作为B的引用,因为B的初始化并不是在A c-tor中完成的)。因此,初始化应该看起来像:
bool A::Initialize(B& b)
{
m_B = &b;
....
}
这样可以吗?
UPD:
的代码是不是新的,我只是想 “修理” 的一些问题。 其实我不是在谈论一些具体的A和B类,而是关于在我的代码库中接近问题的一种方式。代码广泛传递指向B的指针,并在Initialize()中验证它是否为NULL。
将B传递给A的C-tor并不总是一个好的选择。还有其他参数传递给A,在A创建时不存在。因此,我不想将部分参数传递给A-tor,其余部分传递给A :: Initialize()。
shared_ptr也可以是“NULL”,因此将它传递给A :: Initialize()与传递指向B的指针没有区别,在这方面,如果B是强制的,Initialize()dos的声明不会声明不。在我的情况下,我想通过参考B来表达它。
我们的代码目前并未使用boost。所以,虽然shared_ptr比只传递原始指针更好的解决方案,但我提出的解决方案可能被认为是不好的,但仍然是解决方案。
你不应该有一个名为Initialize()的函数 - 你应该有一个构造函数。 – 2009-12-06 17:38:58
您可以使用bcp将单个组件从boost中提取出来:http://www.boost.org/doc/libs/1_41_0/tools/bcp/bcp.html – 2009-12-06 18:58:35