关于DLL C++导出类的问题。

本文探讨了C++在DLL导出时遇到的挑战,包括如何处理类的导出、拷贝函数和多态性。建议采用接口与实现分离的方式,通过纯虚函数接口确保编译器兼容性。此外,还强调了虚析构函数在防止内存泄漏中的关键作用。此方法体现了COM设计原则,增强了软件的解耦性和封装性。
摘要由CSDN通过智能技术生成

标准c导出十分简单,无需再提。

        然而关于c++导出,当我们导出类时,一个类除了构造和析构函数还会导出拷贝函数,并且会将类中的所有函数一一导出,且符号为带修饰符的符号名

        但是由于c++导出修饰符号的规则各有不同,因此需要保证dll编程和使用者使用相同的编译器。这显示是很不通用的办法。

        更好的办法是我们的.h仅声明纯虚函数,而dll实现的派生类仅导出一个获取派生类对象的方法。这样由于c++的虚函数机制是一致的,我们仅需从其实现dll获取该实现的对象,即可调用函数,且该办法在编译后函数的调用几乎是匿名的(仅得到对象获取地址),增加封装性。

        其实这便是com的雏形,将接口和实现分离,实现高度的解耦性,使用者无需知道其实现,只需要知道接口的功能即可使用。

        顺带在这里说一下,在实现C++多态时,当使用 Csupper* pclass=new Cson();

进行delete时是无法调用到子类的析构函数的,当子类析构 存在释放资源时候即会发生泄露。解决办法为将析构函数改为虚函数,这样即可实现。

        详情请见该博主的一份详解:

                        ​​​​​​​   DLL导出C++类

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值