高难度的难题:多个类型的静态成员的析构顺序是如何的

flowlight 2006-11-21 06:40:50
class CClass1
{
static CMenber1 m_Menber;
}

class CClass2
{
static CMenber2 m_Menber;
}

class CClass3
{
static CMenber3 m_Menber;
}

class CClass4
{
static CMenber4 m_Menber;
}

CClassN:CMenberN的构造顺序和析构顺序是如何的?
请N人帮忙解答




...全文
308 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
feng3436 2010-06-04
  • 打赏
  • 举报
回复
个人认为:
静态成员在该类声明的第一个对象时被作为全局变量创建,该静态成员函有对该类对象存储区域的指针,当所有对象被析构时,指针为空,该静态成员也被自动析构,这应该由编译器实现,

所有的类型包括int、char等都应该有自己的构造函数和析构函数,只不过这些函数都由编译器实现了。

我刚看到静态成员一节,以上看法都是个人猜想,有人推荐一本这方面的书就好了
neosu 2006-12-01
  • 打赏
  • 举报
回复
静态, 析构......
有这回事么?
Yofoo 2006-12-01
  • 打赏
  • 举报
回复
静态变量相当于全局变量, 只是只能内部访问,
根本没你说的这个问题
flowlight 2006-11-22
  • 打赏
  • 举报
回复
>>> 会有大量的数据对象交换,数据对象的在框架各层的缓存队列中来回迁移,导致了大量数据对象的拷贝/构造/析构行为
----------
可以考虑使用支持引用计数的智能指针


===============================================
我现在使用了正是类似的方式,仅将对象的引用在各层次进行传递



你可以规定使用你的垃圾回收机制的程序中禁止使用可能影响回收的静态变量,这个问题可以参考ACE的init和fini函数
=========================================
我的垃圾回收机制是由首尾的INIT和EXIT(虽然不知道ACE的机制). 我的组员可以看做我的用户,我期望我的用户使用我的组件的时候能够拥有最好的性能和易用性,并受到最少的限制
  • 打赏
  • 举报
回复
没有顺序先后,取决于编译器
baojian88888 2006-11-22
  • 打赏
  • 举报
回复
>>> 但对静态成员中的资源回收的顺序,我怕出现
"部分使用人员用完资源,并下班回家后,善后的服务人员会处理垃圾,服务人员处理完当时垃圾才下班.但是还有部分人员没有下边,结果工作环境到处是垃圾"
----------
你可以规定使用你的垃圾回收机制的程序中禁止使用可能影响回收的静态变量,这个问题可以参考ACE的init和fini函数


>>> 会有大量的数据对象交换,数据对象的在框架各层的缓存队列中来回迁移,导致了大量数据对象的拷贝/构造/析构行为
----------
可以考虑使用支持引用计数的智能指针
huangyangman 2006-11-22
  • 打赏
  • 举报
回复
好象没有确定的顺序,编译器想怎么干就怎么干
flowlight 2006-11-22
  • 打赏
  • 举报
回复
C++对这点没有相关规定
这个问题是有难度的
flowlight 2006-11-22
  • 打赏
  • 举报
回复
shawnwan() ( ) 信誉:100 Blog 2006-11-22 09:06:34 得分: 0


static 有必要进行析构???
不是在类外进行初始化的吗?所以没有析构才对啊,,你这个对象析构掉了其他的对象怎么办??强烈建议学习C++


============================================================

-_-!
静态类型成员是会自动构造和析构的,分别发生在进程生命周期的最开始和最末尾
shawnwan 2006-11-22
  • 打赏
  • 举报
回复
即使要进行析构,也应该在所有对象都被析构掉后才能进行析构STATIC,,,
学习关注中
shawnwan 2006-11-22
  • 打赏
  • 举报
回复
static 有必要进行析构???
不是在类外进行初始化的吗?所以没有析构才对啊,,你这个对象析构掉了其他的对象怎么办??强烈建议学习C++
flowlight 2006-11-22
  • 打赏
  • 举报
回复
我最近在做某个高性能的应用

会有大量的数据对象交换,数据对象的在框架各层的缓存队列中来回迁移,导致了大量数据对象的拷贝/构造/析构行为,一般的池虽然可以降低资源的申请和分配,但避免不了拷贝/构造/析构行为的发生,所以我做了一个资源管理组件,结合池技术,进行数据的来回剪切,非常高效.

但对其他组员在静态成员中进行申请/释放资源的情况,我对静态成员的构造顺序和析构顺序还不太清楚
flowlight 2006-11-22
  • 打赏
  • 举报
回复
该问题对我很有意义

我正在做一个资源分配/垃圾收集的一个组件
该组件进行资源的自动分配和回收
在任意位置的各资源使用者可以不关心资源的管理,
该框架可以降低资源的管理难度和复杂性,比内存池性能高
对一般的资源使用者来说的工作很好

"各使用人员用完资源,并下班回家后,善后的服务人员会处理垃圾,服务人员处理完垃圾才下班.整个工作环境整洁"

但对静态成员中的资源回收的顺序,我怕出现
"部分使用人员用完资源,并下班回家后,善后的服务人员会处理垃圾,服务人员处理完当时垃圾才下班.但是还有部分人员没有下边,结果工作环境到处是垃圾"

Stefine 2006-11-21
  • 打赏
  • 举报
回复
在一个.h还是四个.h里啊

感觉没什么意义
LiChenYue 2006-11-21
  • 打赏
  • 举报
回复
猜测是按出现的顺序构造,析构则是反过来。
蹭点分!
DentistryDoctor 2006-11-21
  • 打赏
  • 举报
回复
视编译器而定。
针对实际的编译器,你可以加点代码实际测试一下。
baojian88888 2006-11-21
  • 打赏
  • 举报
回复
C++ 对于这个问题未有定义,程序中应该避免出现这样的情况
jihailong 2006-11-21
  • 打赏
  • 举报
回复
真难
给四个八竿子打不着的类排顺序
一分之千 2006-11-21
  • 打赏
  • 举报
回复
4个类之间有联系么?没联系的话哪个先哪个后有关系么?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧