gpt4 book ai didi

c++ - 为什么许多 GUI CObjects ie(CButton) 必须放在堆上而不是堆栈上?

转载 作者:太空狗 更新时间:2023-10-29 23:46:45 25 4
gpt4 key购买 nike

如果我尝试定义一个 GUI 按钮 CButton,例如 CButton btn;,我会得到一个错误-> 因为我试图将它放在堆栈上

但是如果我执行 CButton *btn = new CButton(); 它会工作并且它被放在堆上。

为什么我不能将 CButton 对象放入堆栈?

最佳答案

MFC 中有一个常见的习语,我在其他任何地方都没有见过。可以创建一个将自动清理的“临时”对象。清理发生在 MFC 处理的某些阶段,例如消息循环。

CButton * btn = (CButton *) FromHandle(hwnd);

FromHandle 函数返回一个指向CWnd 对象的指针,但您不知道该对象来自何处。您不应该尝试删除指针,并且不要依赖指针在当前范围之外的有效性 - 永远不要将它保存到成员变量中! MFC 将在必要时删除该对象。

关于c++ - 为什么许多 GUI CObjects ie(CButton) 必须放在堆上而不是堆栈上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9086522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com