пустой список при возврате из функции c ++, инкапсулированной в объект - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть класс, который инкапсулирует std :: list в c ++

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(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.

1 Ответ

0 голосов
/ 08 февраля 2020

Решил, объявив list<CustomObject1> lst; в 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 ().

Не уверен, придется ли мне делать очистку вручную для этого. Кто-нибудь знает, нужно ли это делать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...