|
|
1
4
不是每件事都必须是一门课。Singleton模式可以让您将其转换为一个类,但它实际上并不能为您购买任何全局函数:
如果库已成功初始化,则第一个调用将返回true,第二个调用将安静地执行需要执行的任何操作并退出。您可以在这些接口后面添加任何引用计数或线程跟踪类型的内容。 另外,不要忽视您的库可能能够透明地完成所有这些工作。当调用第一个库函数时,它是否可以检测到它尚未初始化,并在执行工作之前设置所有内容?对于shutdown,只需用一个全局对象注册要销毁的资源,这样当程序退出时它们就会被销毁。这样做当然更为棘手,但可能值得您的库的调用者从可用性方面获益。 |
|
|
2
6
如果可以在main启动之前调用初始化,在main结束之后调用清理,那么这个小技巧(hack?)可能适合您:
输出:
它使用(滥用?)这样一个事实:静态对象的构造函数在main之前调用,析构函数在main之后调用。这就像整个节目的RAII。 |
|
3
1
但是我不确定你真的需要
如果没有,则需要序列化访问,并每次重新初始化数据。
很简单。。。尽管你需要确保
|
|
|
4
0
如果可以更改库实现,则可以让对库函数之一的每次调用访问第一次使用时创建的单例。 或者您将一个全局/静态变量放入库中,该库在构造期间对其进行初始化,并在销毁期间关闭它(如果库本身使用全局变量,并且初始化/关闭的顺序与全局变量冲突,那么这可能会变得很烦人。此外,链接器可能会决定删除未引用的全局变量…)
|
|
|
5
0
Singleton 和 Facade 模式,使C库例程只能通过Facade调用。Facade确保了C库的初始化和清理。Singleton确保只有一个Facade实例。
输出:
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |