将局部方法变量分配给 class 指针

Assign local method variable to class pointer

我正在更改一些代码以处理其调用的某些函数的签名更改。原始代码看起来像(这只是说明性的):

int main()
{
   TestClassA instance;
   instance.MethodA();
   instance.MethodB();
   // do other stuff with instance
}

class TestClassA
{
   void MethodA ()
   {
       UList* aList = NULL;
       getListOfStuff(aList);
       // do some stuff
       fList = aList;
   }
   void MethodB ()
   {
       //do something with fList
   }
   UList* fList;
}

struct Ulist
{
   int value;
   std::vector<Ulist> components;
}

getListOfStuff(UList* aList)
{
   aList = new UList();
   PopulateOriginal(aList);
}

getListOfStuff 的签名现已更改(更改超出我的控制范围)为:

getListOfStuff(UList& aList)
{
   aList=PopulateNewVersion();
}

似乎我不清楚我在问什么,所以澄清一下...我想问的是如何调用新版本的方法 getListOfStuff 并安全地存储从中返回的数据(aList 参数)在原始指针字段 fList 中,稍后可以从 MethodB 访问。

根据下面@GuillaumeGris 的回答,下面的方法行得通吗? (我不确定的一点是新 getListOfStuff 中的赋值是否会影响 fListMethodA 退出后是否仍然指向有效数据。)

void MethodA ()
{
   UList* aList = new UList();
   getListOfStuff(*aList);
   // do some stuff
   fList = aList;
}

您不需要显式堆分配(new)。

class TestClassA
{
   void MethodA ()
   {
       // Clear components
       fList.components.clear();

       getListOfStuff(fList);
   }
   UList fList;
}

如果 fList 是可选的,我建议使用 std::unique_ptr

class TestClassA
{
   void MethodA ()
   {
       if (!fList)
           fList = std::make_unique<Ulist>();
       else
       {
           // Clear components
           fList->components.clear();
       }

       getListOfStuff(*fList);
   }
   std::unique_ptr<UList> fList;
}