我想离开 MFC,如何替换 CPtrArray?
也许我可以typedef它到类似的东西vector<void *>
保存此类的全部功能的更好方法是什么?
谢谢。
最佳答案
您一开始就不应该使用 CPtrArray。它是 Visual C++ 支持模板之前黑暗时代的一个危险的旧类,只能非常谨慎地使用。它的问题是它将指针(任何指针!)存储为 void*
这意味着当您从数组中取回指针时,您没有任何类型信息。如果您的代码严重依赖于此,您将面临滥用对象和严重内存泄漏(例如未能调用析构函数)的风险。
boost::ptr_array
不是 CPtrArray
的直接替代品, 它是一个正确模板化的类型敏感类:它最接近的 MFC 等价物是 CArray<T>
.它使用 void*
的事实处理指针(本质上)是一个实现细节,与使用 vector<void*>
完全不同。直接。
(如果您知道 CPtrArray
的所有问题,那么我为向合唱团布道表示歉意,但我认为有关 CPtrArray
的任何问题都需要附上警告说明。)
关于c++ - 没有 MFC 的 CPtrArray(到 STL 或 Boost),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7144149/