静态成员是通过在C++中为每个实例制作副本来实现的吗



我正在编写一个C++绘图仪,以便绘制模拟和数字信号。绘图仪可以绘制一个或多个轴,一个轴在另一个轴上。每把斧头都可以是模拟的或数字的。即:

Analog axe 1 (with signals 1,2)
Analog axe 2 (with signals 1,3,6)
Digital axe 1  (with signals 1,2,3,8)
Analog axe 3 (with signals 3,8)
Digital axe 2 (with signals 3,4)

这些轴具有相同的x轴(时间(并对齐。

绘图仪可以读取某些类型的数据输入,例如CSV。

我想读取一次输入数据,将模拟数据存储在一个容器中,将数字数据存储在另一个容器。请注意,不同的轴可以具有共同的信号。因此,我希望避免使用具有重复信号的容器。我想要一个包含完整数据的容器,然后在所需的轴上绘制信号。

我正在实现以下类:(不完整代码(

class data_analog{
};
class data_digital{
};
class analog{
static data_analog DataAnalog;
double linewith;
color linecolor;
style linestyle;
public:
trace_curve(); 
};
class digital{
static data_digital DataDigital;
color linecolor;
public:
trace_digital();    
};
class axe{
position p;
public:
virtual void trace_all()=0;    
};
class axeAnalog: public axe{
vector<analog> analogs;
public:
void trace_all();    
};
class axeDigital: public axe{
vector<digital>  digitals;
public:
void trace_all();
};
class plot{
private:
vector<axe> axes;
public:
void print_axes();
};

我正在考虑在模拟和数字类中使用静态成员,以便这些类的所有实例都知道数据
我对OOP和C++没有什么经验。我不知道这是否是解决我问题的最佳方案。此外,我不确定静态成员是在内存中进行复制,还是所有对象都指向同一内存地址。如果它为每个实例制作一个副本,这不是最好的解决方案,因为复制大数据不是一个好主意。

你对这个实施有什么建议吗?

没有静态成员不是副本
您可以通过以下事实来判断:如果您从一个实例进行更改,则从其他实例可以看到更改。一个例子是实例计数器(以ctor为单位递增,以dtor为单位递减(。

尽管如此,我还是建议在大多数情况下不要使用静态数据成员来实现您所描述的目标。确切地说,如果您真的希望所有实例共享相同的实例,则仅使用静态成员。仔细考虑这是否适用于您的情况。

在大多数情况下,我希望设计允许单独的实例组在多个实例中共享同一数据成员会带来优势
为此,我建议将共享数据分离到一个专用类中,所有用户实例都通过引用他们负责的共享数据实例来构建。

最新更新