c++ - 没有 MFC 的 CPtrArray(到 STL 或 Boost)

标签 c++ mfc

我想离开 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/

相关文章:

c++ - MFC 停靠在右下角

c++ - 使用 CDC::DrawText 绘制可变文本

c++ - C++ boost::filesystem 如何检测路径是文件还是目录?

c++ - 在不知道声明签名的情况下将任意函数对象存储到类成员容器中

c++ - C 和 C++ 之间的条件运算符差异

c++ - C/C++ USB 驱动器事件

c++ - 将模板化实现分配给先前声明的函数

c++ - 为什么我应该使用 CString 的 GetBuffer 成员而不是 SetAt?

c++ - 在对话框窗口中使用 ListControl

c++ - 如何检测非事件 Win32 应用程序中的最小化?