繁体   English   中英

从封装在对象中的 C++ 函数返回时为空列表

[英]empty list when return from a function c++ encapsulated in object

我有一个在 C++ 中封装 std::list 的类

class A {
string toSelect;
list<CustomObject1> lst;
list<CustomObject2> lst1;
}

我有另一个类Process ,它在其中一个方法中返回对象 A 。

A Process::do() {
// ...
// ...
CustomObject1 cust = CustomObject1(para1,para2);
list<CustomObject1> c;

CustomObject2 cust2 = CustomObject2(para3,para4);
list<CustomObject2> c2;

c2.push_back(cust2);
c.push_back(cust)

return A("abc", c, c2);

然而,当我在 cpp 单元测试框架中进行单元测试时,列表中的内容立即变空。

namespace UnitTesting
{
    TEST_CLASS(TestMethod)
    {
    public:


    TEST_METHOD(TestDo) {
    Process* process = new Process();
    A a = process->do();
    Assert::AreEqual(a.lst.size(),1) // a.lst is empty
    }
}

如何以这种方式填充对象 A 内的列表?

编辑

A(string toSelect, list<CustomObject1> custObjs, 
    list<CustomObject2> custObjs1)

A.cpp

A::A(string toSelect, list<CustomObject1> custObjs, 
list<CustomObject2> custObjs1)
{
    this->toSelect = toSelect;
    this->custObjs = custObjs;
    this->custObjs1 = custObjs;
}

这是 A 的完整定义。

通过声明list<CustomObject1> lst;解决了这个问题list<CustomObject1> lst; to a list<CustomObject*> *lst其中*lst是指向列表的指针,列表中的每个元素都是指向自定义对象的指针。 这样当我调用构造函数时

A::A(string toSelect, list<CustomObject1*> *custObjs, 
list<CustomObject2*> *custObjs1)
{
    this->toSelect = toSelect;
    this->custObjs = custObjs;
    this->custObjs1 = custObjs;
}

我正在分配属性custObjs指向在 A::process() 方法中创建的列表。

不确定我是否必须为此手动清理。 有谁知道是否需要完成?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM