Следующий код не компилируется для меня в msvc2005:Могу ли я использовать объекты MFC в контейнерах STL?
std::vector<CMenu> vec(10);
CMenu
является объектом меню MFC (например, контекстное меню). Через некоторое тестирование я узнал, что CMenu
не имеет открытого конструктора копии.
Чтобы сделать то, что я хотел сделать, мне нужно было использовать динамический массив.
CMenu* menus = new CMenu[10];
// ...
delete [] menus;
Конечно, теперь я потерял все преимущества использования контейнера STL.
Есть ли у меня другие возможности?
Более разумный дизайн должен был реализовывать их, аналогичные 'shared_ptr <>'. Если вы делаете копию, это относится к тому же меню, и это меню должно быть уничтожено в последнем деструкторе. gf's anwer достигает того же путем обертывания CMenu в shared_ptr вместо этого. – MSalters
Никто никогда не утверждал, что дизайн MFC был умным. Вы хотите взять это с Microsoft, или я должен? –