将局部方法变量分配给 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
中的赋值是否会影响 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;
}
我正在更改一些代码以处理其调用的某些函数的签名更改。原始代码看起来像(这只是说明性的):
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;
}