Masz troche szczęścia, że niedawno miałem problem dzięki któremu dowiedziałem się jednej rzeczy, bo pewnie siedziałbyś kilka dni jak ja :D
Żeby w ogóle móc utworzyć obiekt, wystarczy, że zamiast..
ShapeContainer sc = ShapeContainer();
..napiszesz po prostu..
ShapeContainer sc;
Teraz próbujesz uruchomić konstruktor przenoszący. Tak się składa, że konstruktor przenoszący i przenoszący operator przypisania nie są tworzone, gdy klasa zawiera "user-declared destructor" (więcej na ten temat niżej). U ciebie tak jest. No ale wtedy powinien się uruchomić konstruktor kopiujący, prawda? Gdyby taki był :D Konstruktor kopiujący (i kopiujący operator przypisania) również zostały usunięte z powodu membera std::vector<std::unique_ptr<Shape>> który jest niekopiowalny z powodu przetrzymywanego typu danych (std::unique_ptr<T> jak sama nazwa wskazuje, nie ma konstruktora kopiującego). Także po prostu nie miał się jaki konstruktor uruchomić. Inna sprawa, że było to w ogóle niepotrzebne, bo chcesz zainicjalizować obiekt obiektem utworzonym za pomocą domyślnego konstruktora.
Także najlepiej nie definiuj niepotrzebnie destruktora, a jak już koniecznie chcesz zaznaczyć jego obecność, to poprzez =default. A jeśli z jakiegoś powodu jesteś zmuszony zdefiniować destruktor i zależy ci na przenoszeniu (tutaj zdecydowanie ci zależy, bo nie masz możliwości kopiowania), to defaultuj (=default) konstruktor przenoszący i przenoszący operator przypisania (chociaż rzadko, się zdarza, żeby była konieczność definiowania destruktora i brak konieczności definiowania wspomnianego konstruktora i operatora).
Odnośnie tego deletowanego move ctora: tutaj mój temat na SO. W odpowiedzi Igora jest zacytowany standard.