最专业的网站设计公司有哪些淘宝客怎么做网站管理
2026/4/14 14:11:02 网站建设 项目流程
最专业的网站设计公司有哪些,淘宝客怎么做网站管理,免费申请qq号网页注册,php网站挂到linux服务器上应该这么做在 C 中#xff0c;成员对象、全局对象、局部对象 的生命周期和执行时机是内存管理的核心知识点#xff0c;其规则由 C 标准严格定义#xff0c;下面分模块详细拆解#xff0c;结合示例说明关键细节。一、成员对象的生命周期成员对象是指作为类 / 结构体成员的对象#xf…在 C 中成员对象、全局对象、局部对象的生命周期和执行时机是内存管理的核心知识点其规则由 C 标准严格定义下面分模块详细拆解结合示例说明关键细节。一、成员对象的生命周期成员对象是指作为类 / 结构体成员的对象包括普通成员对象、静态成员对象其生命周期完全依附于宿主对象包含它的类对象但静态成员对象是例外。1. 非静态成员对象创建时机宿主对象构造时先构造所有非静态成员对象按声明顺序而非构造函数初始化列表顺序再执行宿主类的构造函数体。如果是栈上的宿主对象成员对象随宿主对象在栈帧创建时构造如果是堆上的宿主对象new创建成员对象随宿主对象在堆上分配内存后构造如果是全局 / 静态宿主对象成员对象随宿主对象在程序启动阶段main 前构造。销毁时机宿主对象析构时先执行宿主类的析构函数体再按成员对象声明的逆序析构所有非静态成员对象。核心规则成员对象的生命周期与宿主对象完全一致宿主对象销毁则成员对象必然销毁反之亦然。示例非静态成员对象的生命周期#include iostream using namespace std; class Member { public: Member() { cout Member 构造 endl; } ~Member() { cout Member 析构 endl; } }; class Host { private: Member m1; // 声明顺序m1 先m2 后 Member m2; public: Host() { cout Host 构造体执行 endl; } ~Host() { cout Host 析构体执行 endl; } }; int main() { cout 创建栈上 Host 对象 endl; Host h; // 栈上宿主对象 cout main 结束销毁 h endl; return 0; }输出结果体现构造 / 析构顺序创建栈上 Host 对象 Member 构造 // m1 先构造 Member 构造 // m2 后构造 Host 构造体执行 main 结束销毁 h Host 析构体执行 Member 析构 // m2 先析构逆序 Member 析构 // m1 后析构2. 静态成员对象创建时机属于类本身而非某个对象首次使用类之前构造C11 后保证线程安全早于main函数执行且仅构造一次无论创建多少个宿主类对象。销毁时机程序退出阶段main函数执行完毕后按静态对象构造的逆序析构。核心规则生命周期独立于宿主对象与程序进程生命周期一致。示例静态成员对象的生命周期class Host { public: static Member s_m; // 静态成员对象 Host() { cout Host 构造 endl; } }; // 静态成员对象必须在类外初始化 Member Host::s_m; int main() { cout main 开始 endl; Host h1, h2; // 创建两个宿主对象静态成员对象仅构造一次 cout main 结束 endl; return 0; }输出结果Member 构造 // 早于 main 执行 main 开始 Host 构造 Host 构造 main 结束 Host 析构 Host 析构 Member 析构 // main 结束后析构二、全局 / 局部对象的执行时机1. 全局对象包括命名空间内的全局对象构造时机程序启动阶段main函数执行之前按对象在源码中的声明顺序构造不同编译单元的全局对象构造顺序未定义。注如果全局对象被constexpr或inline修饰可能在编译期初始化但普通全局对象在运行期main前构造。析构时机程序退出阶段main函数执行完毕后按构造的逆序析构。特性存储在全局 / 静态存储区生命周期贯穿整个程序运行期。2. 局部对象栈上局部对象自动局部对象无static修饰构造时机程序执行到对象的定义语句时构造析构时机程序执行到对象所在的作用域结束时如}、return、goto跳出作用域析构特性存储在栈区生命周期仅限于当前作用域。静态局部对象static修饰构造时机首次执行到对象定义语句时构造C11 后保证线程安全仅构造一次析构时机程序退出阶段main结束后与全局对象一起析构析构顺序为构造逆序特性存储在全局 / 静态存储区生命周期贯穿程序运行期但作用域仅限于局部。示例全局 / 局部对象的执行时机// 全局对象 GlobalObj g_obj; void test() { // 自动局部对象 LocalObj auto_obj; // 静态局部对象 static LocalObj static_obj; cout test 函数执行中 endl; } int main() { cout main 开始执行 endl; test(); // 第一次执行 test构造 auto_obj 和 static_obj test(); // 第二次执行 test仅构造 auto_objstatic_obj 已存在 cout main 即将结束 endl; return 0; }输出结果GlobalObj 构造 // main 前构造 main 开始执行 LocalObj 构造auto // 第一次 test构造自动局部对象 LocalObj 构造static // 第一次 test构造静态局部对象 test 函数执行中 LocalObj 析构auto // 第一次 test 结束析构自动局部对象 LocalObj 构造auto // 第二次 test重新构造自动局部对象 test 函数执行中 LocalObj 析构auto // 第二次 test 结束析构自动局部对象 main 即将结束 main 执行完毕 GlobalObj 析构 // main 后析构全局对象 LocalObj 析构static// main 后析构静态局部对象三、关键总结表类型存储位置构造时机析构时机生命周期非静态成员对象随宿主对象宿主构造时声明顺序宿主析构时声明逆序与宿主对象一致静态成员对象全局 / 静态区main 前首次用类前main 后整个程序运行期全局对象全局 / 静态区main 前声明顺序main 后构造逆序整个程序运行期自动局部对象栈区执行到定义语句时作用域结束时仅当前作用域静态局部对象全局 / 静态区首次执行到定义语句时main 后构造逆序整个程序运行期局部作用域

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询