程序持续时间

时间:2017-06-17 21:49:03

标签: c++ fonts resources

我有一些资源需要在C ++程序中分配,我希望这些资源能够

  • 可以在程序执行的生命周期内访问
  • 可全球访问

我正在编写一个需要一些字体资源的程序。这包含一个类,该类具有指向某些unsigned char数据的指针,这些数据表示字体的rgb颜色。该类还有一些其他成员,例如字体字符的尺寸。

我想我可以通过创建一个静态(它必须是静态的吗?)指针来解决问题2。我可以在字体类头文件中声明一个指针,任何需要该字体的代码都应该包含这个头,因此可以全局访问指针。

  • 但是我不知道如何防止在程序执行期间修改指针。这可能是一个问题,因为任何使用代码都可以执行global_font_ptr = nullptr,这会导致程序稍后崩溃。更糟糕的是将其设置为随机地址,导致未定义的行为。

我不确定如何解决问题1.我需要从文件中加载我的字体,该文件应该与程序执行的位置相同。因为我正在编写一个库,所以在完成任何其他操作之前,我不想通过调用int main()中的函数来加载字体。对于必须调用该函数来手动处理字体加载的最终用户来说,这将是不方便的。

我可以以某种方式创建一个类的静态实例并获取类构造函数来加载字体吗?

不确定我应该采取什么样的方法来解决这个问题。我希望我的解释清楚。

1 个答案:

答案 0 :(得分:0)

显而易见的解决方案是不要使用全局字体指针,而是将其包装在具有长期运行寿命的类中。公开指向资源的指针,尤其是头文件中的指针,说明资源/内存管理不畅,并且可能导致出现问题,包括ODR违规或懒惰的初始化(取决于您的代码实际执行的操作)。

一般来说:

  • 您希望能够轻松切换字体而不影响全局状态

  • 您不想将资源管理的负担转嫁给用户; init,construct和destroy模式被RAII和类

  • 取代