указатель на std :: list, который не имеет элементов указателя на c ++ - PullRequest
0 голосов
/ 17 мая 2018

Я новичок в мире C ++, и у меня есть это сомнение.Если я хочу определить указатель на std :: list элемента MyClass следующим образом:

std::list<MyClass> * myList=new list<MyClass>();

и после этого я добавляю 2 экземпляра MyClass в myList.

2 экземпляраMyClass размещены в памяти стека, а myList в куче, это правда?Так что, если 2 экземпляра выйдут из области видимости, myList потеряет все элементы внутри него?

Мне не понятно управление памятью в этой ситуации.Итак, я проверяю этот код:

list<A> * myList=new list<A>();
{
    A a1(4);
    A a2(1);
    myList->push_back(a1);
    myList->push_back(a2);
    for(A& a:*myList)
        cout << a.getVar()<<endl;
}
    cout <<"a1 and a2 go out of scope"<<endl;
    for(A& a:*myList)
        cout << a.getVar()<<endl;

, где код класса:

class A{
    private:
        int var;
    public:
        A(int x){this->var=x;}
        int getVar(){ return var;}
};

И вывод:

4
1
a1 and a2 go out of scope
4
1 
...