C++ - 防止全局实例化?

gre*_*det 8 c++ constructor global

有没有办法强制在堆栈上实例化一个类,或者至少阻止它在C++中是全局的?

我想阻止全局实例化,因为构造函数调用需要先前初始化的C API.AFAIK无法控制全局对象的构造顺序.

编辑:应用程序的目标是嵌入式设备,也禁止动态内存分配.用户实例化该类的唯一可能解决方案是在堆栈上或通过placement new运算符.

Edit2:我的类是一个库的一部分,它依赖于其他外部库(来自C API).我无法修改这些库,我无法控制库在最终应用程序中的初始化方式,这就是为什么我在寻找一种方法来限制类的使用方式.

pmr*_*pmr 7

而不是对类的对象设置一些任意限制,我宁愿通过将它们包装到类中来安全地调用C API.该类的构造函数将执行初始化,析构函数将释放获取的资源.

然后你可以要求这个类作为你的类的参数,初始化总是会解决.

用于包装器的技术称为RAII,您可以在此SO问题和此Wiki页面中阅读更多相关信息.它最初的目的是将封装资源初始化和释放组合到对象中,但也可以用于各种其他事情.