Figure** figure_colletion = new Figure * [this->collection_size];
Вот тут в конструкторе вы заводите локальную переменную (с тем же именем, что и член класса) и что-то с ней делаете. Она "затенняет" член класса. А вот
figure_colletion
, к которому вы обрашаетесь в методе
select_new_figure()
- это уже член класса, который вы нигде не выделили и ничем не заполнили.
Поэтому любой уважающий себя стиль форматирования кода подразумевает, что члены класса должны быть приватными и как-то по особому именоваться (например, заканчиваться на "_", или начинаться с "p") тогда бы вы этой ошибки не совершили. Еще можно включить предупреждения при компиляции.
И еще, писать в методах
this->
перед каждым обращением к члену класса не обязательно.