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

Assign local method variable to class pointer

本文关键字:指针 分配 变量 局部 方法      更新时间:2023-10-16

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

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中的赋值是否会影响fList在退出后MethodA是否仍指向有效数据。

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;
}