|
|
1
28
首先,C不适合OO编程。如果你这样做的话,你会一直在战斗。其次,单例只是一些封装的静态变量。所以可以使用静态全局变量。然而,全局变量通常有太多与之相关的问题。否则,可以使用函数局部静态变量,如下所示:
或更智能的宏:
最后,记住,独生子女大多被虐待。很难纠正它们,尤其是在多线程环境下… |
|
|
2
18
你不需要。C已经有了全局变量,所以您不需要四处工作来模拟它们。 |
|
|
3
14
它和C++版本差不多。只需要一个返回实例指针的函数。它可以是函数内部的静态变量。根据平台的不同,用关键部分或pthread mutex包装函数体。
请注意,您还需要一个函数来释放单例。尤其是当它获取了任何在进程退出时不会自动释放的系统资源时。 |
|
|
4
5
编辑:我的答案假设您正在创建的单例有点复杂,并且有一个多步骤的创建过程。如果它只是静态数据,那么使用其他人建议的全局数据。 C中的单子会很奇怪。…我从未见过“面向对象C”的例子,它看起来特别优雅。如果可能的话,考虑使用C++。C++允许你选择和选择你想要使用的特性,很多人只是使用它作为一个“更好的C”。 下面是一个非常典型的无锁一次性初始化模式。如果前一个值为空,则interlockCompareExchangeptr自动交换新值。这可以保护多个线程同时尝试创建单一实例时,只有一个线程会获胜。其他人将删除他们新创建的对象。
|
|
|
5
2
另一种观点是:C程序中的每个文件实际上都是一个单例类,它在运行时自动实例化,不能被子类化。
给所有的东西一个合适的前缀,现在你可以使用
如果你的单身汉很复杂,你可以写一个
|
|
|
6
-2
只要做
它也可以在并发环境中工作。 |
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
Bobby · 复合字面值总是左值吗? 1 年前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 1 年前 |