C++ 我可以在STL容器中使用MFC对象吗?

C++ 我可以在STL容器中使用MFC对象吗?,c++,mfc,memory-management,C++,Mfc,Memory Management,以下代码没有在MSVC2005中为我编译: std::vector<CMenu> vec(10); 当然,现在我已经失去了使用STL容器的所有好处 我还有其他选择吗?您可以使用智能指针或智能指针容器,例如使用Boost或TR1: std::vector<shared_ptr<CMenu> > vec; vec.push_back(make_shared<CMenu>()); std::向量向量向量机; vec.push_back(使_共享())

以下代码没有在MSVC2005中为我编译:

std::vector<CMenu> vec(10);
当然,现在我已经失去了使用STL容器的所有好处

我还有其他选择吗?

您可以使用智能指针或智能指针容器,例如使用Boost或TR1:

std::vector<shared_ptr<CMenu> > vec;
vec.push_back(make_shared<CMenu>());
std::向量向量向量机;
vec.push_back(使_共享());

您可以将STL容器与智能指针结合使用来存储指针,以便在容器被销毁时自动
delete
d堆分配的对象

此工作的正确智能指针是


有关更多信息,请参见。

MFC对象是围绕Windows句柄的简单包装,大多数对象设计用于释放析构函数中的句柄。因此,拥有一个复制构造函数是危险的,因为第一个构造函数被破坏会使另一个构造函数无效


让您的容器容纳句柄,并在每次需要转换回MFC land时使用FromHandle。

更智能的设计是实现类似于
共享的\u ptr
。如果您复制了一个菜单,它引用的是同一个菜单,该菜单应该在最后一个析构函数中销毁。gf的anwer通过将CMenu包装在一个共享的ptr中实现了同样的效果。从来没有人声称MFC的设计是聪明的。你是想和微软合作,还是我应该?
std::vector<shared_ptr<CMenu> > vec;
vec.push_back(make_shared<CMenu>());