Это работает, да;Вызов new просто возвращает указатель на MyObject, и его можно использовать везде, где этот тип допустим. HOWEVER вызов new может вызвать исключение, или конструктор MyObject может вызвать исключение, означающее, что вся ваша карта MyObjects, выделенная из кучи, будет утечка.
Если вам нужна безопасность исключений, а также нет необходимости удалять эти объекты, вы должны использовать вместо этого умный указатель:
std::map<int, boost::shared_ptr<MyObject> > objects = boost::assign::map_list_of<int, boost::shared_ptr<MyObject> >
(1, new MyObject())
(2, new MyObject())
(3, new MyObject());