构造与析构 && static 问题
来源:互联网 发布:辽宁体育频道哪个软件 编辑:程序博客网 时间:2024/05/01 15:09
----记录一下,其中的痛只有经历的才知道。。。。
#include <iostream>
using namespace std;
typedef struct _tagStaticTextConfig
{
_tagStaticTextConfig()
{
Height = 0;
cout << "_tagStaticTextConfig constructor" << endl;
}
~_tagStaticTextConfig()
{
cout << "_tagStaticTextConfig destructor" << endl;
}
int Height;
}StaticTextConfig;
class CWinUtilityControl
{
public:
CWinUtilityControl() {cout << "CWinUtilityControl constructor" << endl; }
virtual ~CWinUtilityControl(){ cout << "CWinUtilityControl destructor " << endl; }
static int test;
};
class CSQLoginWnd :public CWinUtilityControl
{
public:
CSQLoginWnd( void) {cout << "CSQLoginWnd contructor " << endl; };
virtual ~CSQLoginWnd(void ){cout << "CSQLoginWnd destructor " << endl; }
//bool create();
static CSQLoginWnd* init();
protected:
public:
static StaticTextConfig* m_STChelp; //STC:StaticTextConfig
static CSQLoginWnd* m_SharedSQLoginWnd;
};
#include <string>
#include <iostream>
#include <tchar.h>
#include "resource1.h"
CSQLoginWnd* CSQLoginWnd::init()
{
if (!m_SharedSQLoginWnd)
{
m_SharedSQLoginWnd = new CSQLoginWnd();
m_STChelp = new StaticTextConfig();
CSQLoginWnd::m_STChelp->Height = 100;
return m_SharedSQLoginWnd;
}
return m_SharedSQLoginWnd;
}
CSQLoginWnd* CSQLoginWnd::m_SharedSQLoginWnd = NULL;
StaticTextConfig* CSQLoginWnd::m_STChelp = NULL;
int main()
{
//CSQLoginWnd::k = 0; error
CSQLoginWnd* pwindow = CSQLoginWnd::init();
delete pwindow;
if (!CSQLoginWnd::m_SharedSQLoginWnd)
{
cout << "shareSQLLoginWnd is Null" << endl;
} else{
cout << CSQLoginWnd::m_STChelp->Height << endl; //数据还存在;
}
getchar();
return 0;
}
-------总结
// 1.static 的成员一定要在main前定义;(放在全局空间上)
//2.(就算手动)del了空间但是static成员的空间没有释放;
//3.CSQLoginWnd* pwindow; 只是定义指向CSQLoginWnd空间大小的指针(大小还是4字节),如果不初始化,就来一句pwindow->k = 1; 那是肯定有问题的; 它指向的空间内没有K这个标志;所以要它正确,必须指向已经初始化的空间;当然,构造空间,与析构空间就不关它的事情了,就是说它只负责“依序寻访聚合物(容器)的东西”;空间的构造交给构造函数和析构函数,什么时候调用:如果是在堆上就需手动调用del。 如果是栈上;越界后它会自动释放这聚合物空间,而这指向聚合物的指针呢?如果它是分配在栈上的,越界后它也会没有意义;你还担心影响到这聚合物空间,不用担心,就算释放也就释放指针它自己的4字节空间;如果他分配在堆上(再次提醒是4字节在堆上),它就一直存在(如上例子);
0 0
- 构造与析构 && static 问题
- static与类,构造、析构函数的关系
- static对象和非static对象构造和析构顺序的问题
- static 与私有构造函数
- static 与私有构造函数
- C++构造与析构(18) - 静态对象(static object)何时销毁
- C++ 构造函数与析构函数详解(三)---局部静态存储 局部static
- java 基础:static 与构造方法
- 黑马程序员---构造函数与Static静态
- 构造函数与static执行顺序
- java--构造器与static,初始化顺序
- 自定义构造函数与析构函数问题
- C++全局变量与静态变量构造析构顺序问题
- 构造与析构
- 构造与析构
- 析构与构造
- 构造与析构
- 构造与析构
- setCellTest
- 14、Longest Common Prefix
- Struts2中过滤器和拦截器的区别
- 用Lambda或者Linq语法对结果进行Group by并输出
- Android:继承ScrollView实现自定义向上滚动弹出框(背景半透明)
- 构造与析构 && static 问题
- winForm +access 数据连接 出错 未在本地计算机上注册“Microsoft.Jet.OLEDB.12.0”
- 学密码学一定得学程序 KMP
- Zookeeper的灵魂---Paxos
- MIME Type
- SQL Server 中WITH (NOLOCK)浅析
- New Blog after joining a new company!
- 线下支付的流程
- 查看ORACLE是共享还是专用服务器模式