C++ 运行过程中理论基础篇(MSVC编译器)

文章讨论了LoadLibrary函数在加载DLL时的内存管理机制,指出多次调用只会加载一次,除非调用FreeLibrary。在多线程环境下,DLL中的对象需谨慎处理以避免共享问题。对于STL容器如vector,无论是存储对象还是指针,都需要考虑内存生命周期和深拷贝的问题,特别是当对象含有指针成员时,需要自定义拷贝构造函数来正确处理内存拷贝。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、LoadLibrary

多次LoadLibrary,只有第一次会真正加载,后面一直驻留在EXE内存中。

只要不调用FreeLibrary,DLL一直都在。

后面的LoadLibrary等同于空操作。

多线程也是这样,因此DLL中多数函数中,new一个然后返回值,防止多个线程共用一个变量

2、SLT容器 vector中泛型类是深拷贝吗?

使用stl的数据结构,装载的成员到底是使用对象,还是使用指针,有时候会让人琢磨不定(使用一般对象吧,怕对象出作用域后被系统释放(如一个函数的局部变量),使用指针吧,怕频繁的new delete导致内存碎片)。

所以是vector CBase对象,还是vector<CBase*> 在使用push_back进行装载时都差不多,即使不new 指针,泛型也会装载一个新的类对象,有新的内存地址。重要的是CBase若存在指针成员变量(如这里的char *m_str),就需要手动写好拷贝构造函数(如这里对m_str进行内存拷贝,不能是简单的=赋值操作)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值