C ++ static,extern与全局数据一起使用

用户名

我是C ++和OOP的新手,并且一直在尝试学习高效或“正确”的做事方法,但仍然遇到麻烦。

我正在创建一个DataStore类,其中包含其他类/对象的数据。此类将永远只有一个实例/对象;但是,因为它是全局数据,所以实际上并不需要对象/实例。在这种情况下,我觉得这只是提供范围的一种方式。因此,我想直接更改类成员,而不是传递对象。我已经阅读了有关static和_extern的信息,但是我无法确定它们是否可行,或者是否还有其他更好的选择。

现在,我正在传递一个创建的对象以更改其数据,但是我宁愿将该类作为“自身”而不是“自身的实例”进行访问,同时仍然保留将其作为对象的想法。

mb

编辑:在注释OP中,解释了数据存储将由在多个线程中运行的代码读取,并由一个线程中的代码更新。我以前的答案不再适用。这是一个更好的答案。

不要使用全局变量来保存商店的实例。这将打开许多可能困扰您很长时间的细微错误的大门。您应该为您的阅读线程授予对商店的只读访问权限。您的写入线程应获得读写访问权限。

确保您在数据存储区中的读取方法已正确标记为const然后创建数据存储的单个实例,并将指向它的指针放在const全局变量中。您的编写线程应该具有获取非常量指针的另一种机制(GetInstance如@Mats所建议的,添加一个公共静态方法)。

我以前的回答:如果您确定始终只有一个数据存储实例,请不要将其传递出去。

全局变量不受欢迎,某些语言(Java和C#)完全禁止使用它们。因此,在C#和Java中,您改为使用静态类成员,它们实际上是同一件事(存在完全相同的问题)。

如果可以将单个实例放在const全局变量中,那应该没问题。

如果您正在执行任何类型的多线程处理,则需要确保您的存储区是线程安全的,否则确实会发生不好的事情。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C中将全局结构与pthread一起使用

来自分类Dev

在C中将全局结构与pthread一起使用

来自分类Dev

如果我将extern“ C ++”与C工具链一起使用会发生什么?

来自分类Dev

在C#中将JSON与损坏的数据一起使用

来自分类Dev

Objective-C定义一个供多个ViewController使用的全局数组

来自分类Dev

Objective-C定义一个供多个ViewController使用的全局数组

来自分类Dev

在C ++中定义全局数据的最佳方法是什么?

来自分类Dev

在C中与atoi()一起使用

来自分类Dev

将变量变量与超全局数组一起使用

来自分类Dev

如何在C#中使用全局数组?

来自分类Dev

最佳实践:C#与数据库一起使用

来自分类Dev

在C#中将INSERT sql命令与Access数据库一起使用

来自分类Dev

文件处理C ++:与数据库文件一起使用时,哪个是理想的流?

来自分类Dev

将c3p0与Tomcat 8数据源一起使用

来自分类Dev

在C#中将INSERT sql命令与Access数据库一起使用

来自分类Dev

将GDB与Eigen C ++库一起使用

来自分类Dev

C ++-将istream_iterator与wstringstream一起使用

来自分类Dev

在目标C中与__cplusplus一起使用@import

来自分类Dev

Qt与小牛一起使用Objective-C

来自分类Dev

QtQuick TableView不能与C ++-QAbstractTableModel一起使用

来自分类Dev

Opencv4Android:如何与C ++一起使用

来自分类Dev

ReactiveCocoa可以与纯c ++ ViewModel一起使用吗?

来自分类Dev

在Linq C#中与charindex一起使用left

来自分类Dev

C,如何一起使用fgets和fscanf

来自分类Dev

在C ++中将getline()与文件输入一起使用

来自分类Dev

在c ++中与fifo一起使用(阻止读取)

来自分类Dev

在C ++中将beginthread与指针结构一起使用

来自分类Dev

在C中将XOR与指针一起使用

来自分类Dev

C ++如何扩展模板以与vector <T>一起使用

Related 相关文章

  1. 1

    在C中将全局结构与pthread一起使用

  2. 2

    在C中将全局结构与pthread一起使用

  3. 3

    如果我将extern“ C ++”与C工具链一起使用会发生什么?

  4. 4

    在C#中将JSON与损坏的数据一起使用

  5. 5

    Objective-C定义一个供多个ViewController使用的全局数组

  6. 6

    Objective-C定义一个供多个ViewController使用的全局数组

  7. 7

    在C ++中定义全局数据的最佳方法是什么?

  8. 8

    在C中与atoi()一起使用

  9. 9

    将变量变量与超全局数组一起使用

  10. 10

    如何在C#中使用全局数组?

  11. 11

    最佳实践:C#与数据库一起使用

  12. 12

    在C#中将INSERT sql命令与Access数据库一起使用

  13. 13

    文件处理C ++:与数据库文件一起使用时,哪个是理想的流?

  14. 14

    将c3p0与Tomcat 8数据源一起使用

  15. 15

    在C#中将INSERT sql命令与Access数据库一起使用

  16. 16

    将GDB与Eigen C ++库一起使用

  17. 17

    C ++-将istream_iterator与wstringstream一起使用

  18. 18

    在目标C中与__cplusplus一起使用@import

  19. 19

    Qt与小牛一起使用Objective-C

  20. 20

    QtQuick TableView不能与C ++-QAbstractTableModel一起使用

  21. 21

    Opencv4Android:如何与C ++一起使用

  22. 22

    ReactiveCocoa可以与纯c ++ ViewModel一起使用吗?

  23. 23

    在Linq C#中与charindex一起使用left

  24. 24

    C,如何一起使用fgets和fscanf

  25. 25

    在C ++中将getline()与文件输入一起使用

  26. 26

    在c ++中与fifo一起使用(阻止读取)

  27. 27

    在C ++中将beginthread与指针结构一起使用

  28. 28

    在C中将XOR与指针一起使用

  29. 29

    C ++如何扩展模板以与vector <T>一起使用

热门标签

归档