我有一个类负责创建和初始化一些大对象,因为对象都是相同的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时,它已经丢失了所有内容。
我可能错过了一些微不足道的东西,但我不明白为什么它超出了范围。
答案 0 :(得分:2)
这是微不足道的,是的。您正在初始化原始指针的副本。您可能希望通过引用传递它:
void Test::InitObject(LargeObject*& obj)
按值传递意味着您将new
的返回值分配给指针的副本。函数InitObject
之外的那个保持不变。
还有一些事情 - 在施工后初始化物体应该小心。如果对象在构造后无效,那么这是一个糟糕的设计(不包括一些罕见的情况)。您可以通过从构造函数中抛出异常来表示无效初始化。
另外,请考虑使用智能指针而不是原始指针。