혹시
list <Parent> a;
Parent* xxx = new Child();
a.push_back(*xxx);

이렇게 쓰셨다면 이미 그 xxx는 Parent의 내용만을 가지게 됩니다.
push_back 함수 안에서는 xxx의 참조를 받아오고, 그것을 자기 안에서 새로운 Parent 를 하나 생성한 뒤
거기다가 대충 맞는 데이터를 복사합니다.

하지만 가상함수 테이블은 복사되지 않기 때문에, 이 경우에는 Parent 에 있는 함수만 사용하게 됩니다.

#include "stdafx.h"

#include <list>


class A
{
public:
        virtual void AAA()
        {
                printf("aaa");
        }
};

class B : public A
{
        void AAA()
        {
                printf("bbb");
        }

};

int _tmain(int argc, _TCHAR* argv[])
{
        std::list<A> aList;
        aList.push_back(*(new B()));

        for(std::list<A>::iterator iter = aList.begin(); iter != aList.end(); iter++)
        {
                (*iter).AAA();
        }

        system("pause");

        return 0;
}

이 코드의 경우 결과는 aaa 입니다.


그리고

#include "stdafx.h"

#include <list>


class A
{
public:
        virtual void AAA()
        {
                printf("aaa");
        }
};

class B : public A
{
        void AAA()
        {
                printf("bbb");
        }

};

int _tmain(int argc, _TCHAR* argv[])
{
        std::list<A*> aList;
        aList.push_back(new B());

        for(std::list<A*>::iterator iter = aList.begin(); iter != aList.end(); iter++)
        {
                (*iter)->AAA();
        }

        system("pause");

        return 0;
}

이렇게 한 경우, 결과는 bbb가 나오게 됩니다. (원하시는 작동방식으로 작동합니다)