0

我有一个类负责创建和初始化许多大对象,因为这些对象都是相同的类型,我不想为所有对象重复相同的初始化代码,我为每个对象调用一个 Init 方法对象,例如:

InitObject(objMember);

void Test::InitObject(LargeObject * obj)
{
    obj = new LargeObject;
    obj->Load();
    obj->SetSomeProperty(false);
}

完成此操作后,我从公共方法调用一组方法来获取指向每个对象的指针:

//public
LargeObject * Test::GetObject()
{
    return objMember;
}

问题是对象正在失去作用域,当调用 InitObject 时,对象被正确构造和填充,但是当我调用 GetObject 时,它失去了一切。

我可能遗漏了一些微不足道的东西,但我不明白为什么它会超出范围。

4

1 回答 1

2

这是微不足道的,是的。您正在初始化原始指针的副本。您可能希望通过引用传递它:

void Test::InitObject(LargeObject*& obj)

按值传递意味着您将返回分配给new指针的副本。函数外的那个InitObject保持不变。

还有一些事情 - 在构造后初始化对象应该小心。如果对象在构造后无效,则它是一个糟糕的设计(不包括一些极少数情况)。您可以通过从构造函数中抛出异常来发出无效初始化信号。

另外,考虑使用智能指针而不是原始指针。

于 2012-10-14T16:55:16.700 回答