菜单问题
来源:互联网 发布:小提琴谱软件 编辑:程序博客网 时间:2024/05/17 23:21
菜单是通过事件触发(左键)生成的窗体.一般用指针来生成,不用栈变量.因为栈变量出了作用域就会析构,窗体会消失.如果用New的方式来Show,那么如何管理生成的指针就是一个问题.
1. 可以把Menu作用一个局部类的内部成员,在局部类消毁的时候一起消毁;
2. 用全局指针变量
使用全局指针变量,如果有多个菜单,那么这个指针的管理很麻烦.尤其是最后怎么delete是个问题!duilib工程中Menu使用了一个观察者/接收者模式.每一个Menu指针是一个接收者,生成时通过观察者加入这个接收者.最后在窗口过程执行最后一个函数时消毁(如WM_NCDESTROY消息)
或者直接用delete this.
delete p 是一个两步的过程:调用析构函数,然后释放内存。delete p产生的代码看上去是这样的(假设是Object*类型的):
delete原语可以看作如下这样一个过程:
p->~Object();
p->operator delete(p);
p->~Object() 语句调用p指向的Object对象的析构函数。
p->operator delete(p) 语句调用对象p的内存释放原语 void operator delete(void* p)。如果没有实现该方法,将调用系统的内存释放原语::operator delete(ptr)做释放该对象内存的操作。
成员函数调用delete this合法吗?
只要你小心,一个对象请求自杀(delete this),是可以的。
以下是我对“小心”的定义:
你必须100%的确定,this对象是用 new分配的(不是用new[],也不是用定位放置 new,也不是一个栈上的局部对象,也不是全局的,也不是另一个对象的成员,而是明白的普通的new)。
你必须100%的确定,该成员函数是this对象最后调用的的成员函数。
你必须100%的确定,剩下的成员函数(delete this之后的)不接触到this对象任何一块(包括调用任何其他成员函数或访问任何数据成员)。
你必须100%的确定,在delete this之后不再去访问this指针。换句话说,你不能去检查它,将它和其他指针比较,和NULL比较,打印它,转换它,对它做任何事。
自然,对于这种情况还要习惯性地告诫:当你的指针是一个指向基类类型的指针,而没有虚析构函数时(也不可以delete this)。
注意:因为是在类成员函数里面delete this的,所以在此语句以后,不能访问任何的成员变量及虚函数(调用虚函数必须对象实例存在以检查类型),否则一定非法。
上面所说的在执行时不一定会报错,但尽量不要这么做。
代码段不会被释放,释放内存只释放数据段
#include <iostream>using namespace std;class A{public: A() { cout << "A()" << endl; } ~A() { cout << "~A()" << endl; } int get(int) { cout << "A::get(int)" << endl; return 5; }#if 0 void operator delete(void* ptr) { cout << "A::delete()" << endl; }#endif};int main(){ A* ptr = new A();#if 0 ::operator delete(ptr); delete ptr;#else A::A(); delete ptr; cout << "code is " << ptr->get(1) << endl;#endif}
- 菜单问题
- 右键菜单问题?
- select下拉菜单问题
- KUbuntu菜单前缀问题
- BCG 动态菜单问题
- 菜单资源问题
- 菜单切换的问题
- 桌面菜单背景问题
- vs2010 标记菜单问题
- 菜单图标问题
- extjs菜单隐藏问题
- UltraEdit菜单乱码问题
- UltraEdit菜单乱码问题
- flash 右键菜单问题
- Toolbar显示菜单问题
- NavigationView 子菜单问题
- 菜单展开问题
- 右键菜单的响应问题
- Python的包管理工具Pip
- android listView 点击无响应的解决方法
- DNP3执行漏洞
- 1999~2012年全国百优博士论文 (计算机类)
- 就从这出发吧
- 菜单问题
- VMware虚拟机磁盘压缩
- window下php安装memcahce一些问题解决
- Java反编译
- Exchange 2010 DAG部署过程中碰到的问题
- Qt 第一步,环境搭建与测试
- Unity手游之路<六>游戏摇杆之Easy Touch 3教程
- c++ template笔记
- android图片添加右边阴影