我想离开MFC,我怎样才能取代CPtrArray?
也许我可以用 to类似的vector<void *>
有什么更好的方法来保存这个类的全部功能呢?
谢谢。
发布于 2011-08-22 07:14:21
不需要自己写,你可以用boost::ptr_array代替。它使用底层的std::vector<void*>来存储指针。
发布于 2011-08-22 08:09:23
首先,您不应该使用CPtrArray。在VisualC++支持模板之前,它是一个危险的老类,只能非常谨慎地使用。它的问题是它存储指针(任何指针!)作为void*,这意味着当您将指针从数组中拿回来时,您就没有,也没有任何的类型信息。如果您的代码严重依赖于此,那么您就面临着滥用对象和严重内存泄漏的风险(例如,未能调用析构函数)。
boost::ptr_array不是CPtrArray的直接替代品,它是一个正确的模板类型敏感类:它最接近的MFC等效值将是CArray<T>。它使用void*来处理指针这一事实(本质上)是一个实现细节,与直接使用vector<void*>完全不同。
(如果你知道CPtrArray的所有问题,那么我很抱歉对唱诗班说教,但我认为任何关于CPtrArray的问题都需要附加警告。)
https://stackoverflow.com/questions/7144149
复制相似问题