使用c ++中的类指针维护范围

时间:2012-10-14 16:53:53

标签: c++

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

InitObject(objMember);

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

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

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

问题是对象正在丢失范围,当调用InitObject时,对象被正确构造和填充,但是当我调用GetObject时,它已经丢失了所有内容。

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

1 个答案:

答案 0 :(得分:2)

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

void Test::InitObject(LargeObject*& obj)

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

还有一些事情 - 在施工后初始化物体应该小心。如果对象在构造后无效,那么这是一个糟糕的设计(不包括一些罕见的情况)。您可以通过从构造函数中抛出异常来表示无效初始化。

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