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

标签 c++ constructor global

有没有办法强制类在堆栈上实例化或至少防止它在 C++ 中成为全局类?

我想阻止全局实例化,因为构造函数调用需要预先初始化的 C API。据我所知,没有办法控制全局对象的构造顺序。

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

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

最佳答案

我宁愿通过将 C API 的调用包装到一个类中来使对 C API 的调用安全,而不是对您的类的对象施加一些任意的限制。该类的构造函数将进行初始化,而析构函数将释放获取的资源。

然后你可以要求这个类作为你的类的参数,初始化总是会成功的。

用于包装器的技术称为 RAII,您可以阅读更多相关信息 in this SO question还有这个wiki page .它最初是为了将资源初始化和释放封装到对象中,但也可以用于其他各种事情。

关于C++ - 防止全局实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13496027/

相关文章:

c++ - 赋值运算符(字符串)右侧的类型是什么?

c++ - 调试断言在 Visual Studio 中失败,但在在线 IDE 上运行正常

c++ - 构造函数初始化列表与昂贵的操作

javascript - 为什么我需要为扩展函数设置构造函数?

python - 在 Python 中,什么是全局语句?

php - 为什么包含变量时全局变量在类中为空?

c++ - std::invoke 和 std::apply 有什么区别?

java - java中的非静态嵌套类

javascript - 在 javascript 中,访问 'window.Math' 比访问没有 'Math' 的 'window.' 对象慢还是快?

c++ - 使用 OpenGL 进行实时逐像素过滤的最佳方法?