Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跨类共享数据 我正在编写一个程序来读取和解析Ext2文件系统C++。我将我的程序分为几个类,例如,Ext2作为主类,Superblock等。我有一些数据要检索一次,我希望这些数据对所有类都可用,例如块大小等。在程序中实现多个类之间的数据共享而不使用全局变量的最佳方法是什么(我知道这是臭名昭著的)_C++_Design Patterns - Fatal编程技术网

跨类共享数据 我正在编写一个程序来读取和解析Ext2文件系统C++。我将我的程序分为几个类,例如,Ext2作为主类,Superblock等。我有一些数据要检索一次,我希望这些数据对所有类都可用,例如块大小等。在程序中实现多个类之间的数据共享而不使用全局变量的最佳方法是什么(我知道这是臭名昭著的)

跨类共享数据 我正在编写一个程序来读取和解析Ext2文件系统C++。我将我的程序分为几个类,例如,Ext2作为主类,Superblock等。我有一些数据要检索一次,我希望这些数据对所有类都可用,例如块大小等。在程序中实现多个类之间的数据共享而不使用全局变量的最佳方法是什么(我知道这是臭名昭著的),c++,design-patterns,C++,Design Patterns,我想到的一种方法是将这些数据位保留为主Ext2类中的成员,然后将对该实例的引用传递给需要通过getter方法访问此信息的每个类。有更好的方法吗?您可以创建一个包含此数据的单独结构,并使所有数据共享类指向同一个实例这个结构(注意内存泄漏,也许考虑)。< /P> struct SharedData { int值; }; 阶级事务 { 公众: 共享数据*共享; void printData() { std::cout someValue someValue=newValue; } }; int mai

我想到的一种方法是将这些数据位保留为主Ext2类中的成员,然后将对该实例的引用传递给需要通过getter方法访问此信息的每个类。有更好的方法吗?

您可以创建一个包含此数据的单独结构,并使所有数据共享类指向同一个实例这个结构(注意内存泄漏,也许考虑)。< /P>
struct SharedData
{
int值;
};
阶级事务
{
公众:
共享数据*共享;
void printData()
{
std::cout someValue someValue=newValue;
}
};
int main()
{
沙雷达;
s、 someValue=10;
一件事;
另一件事b;
a、 共享=&s;
b、 共享=&s;

STD::这是一个生命周期的问题。如果共享数据的所有者拥有所有其他对象,那么它可以是一个可以将引用传递给其他对象的成员。否则,我会考虑一个允许共享所有权的惯用方式。我的印象是,适当的全局性。(类似单选的类似选择)不应该如此迅速地被驳回。一个关键的考虑因素可能是:这个数据在被检索之后会有变化吗?没有变化的全局数据远比在一个帽子里变化的数据要麻烦得多。
struct SharedData
{
    int someValue;
};

class Thing
{
public:
    SharedData *shared;
    void printData()
    {
        std::cout << shared->someValue << std::endl;
    }
};

class OtherThing
{
public:
    SharedData *shared;
    void changeData(int newValue)
    {
        shared->someValue = newValue;
    }
};

int main()
{
    SharedData s;
    s.someValue = 10;

    Thing a;
    OtherThing b;
    a.shared = &s;
    b.shared = &s;

    std::cout << s.someValue << std::endl;
    //prints 10;

    b.changeData(20);
    a.printData();
    //prints 20;
}