如何管理对象的初始化数据?

How to manage objects' initialization data?

我进退两难,很乐意听取在 C++ 方面更有经验的人的意见。 确切地说,我的难题是如何管理(创建)对象的初始化数据。例如我有几个对象,每个对象都需要它自己唯一的一组数据来初始化这个对象。每个对象都在应用程序开始时初始化,之后不需要它的初始化数据。我有两个关于如何完成的想法,我想就哪一个更好(在编译的可执行文件大小和可选的运行时内存使用方面)寻求建议。

想法 1(示例):

struct A
{
  static int data1;
  static float data2;
  static char data3;
};

int A::data1 = 1;
float A:data2 = 1.5;
char A::data3 = 'c';

int main()
{
  *do something with this data*
}

想法 2(示例):

struct A
{
  int data1;
  float data2;
  char data3;

  A()
  {
    data1 = 1;
    data2 = 1.5;
    data3 = 'c';
  }

};

int main()
{
  A a;

  *do something with this data*
}

将有几个不同的对象要初始化,并且每种类型的对象都可以创建多次,因此在第一个示例中,我需要为具有相同类型的多个对象创建具有唯一数据的多个结构,在第二个示例中,我可以传递给构造函数 A::A() 索引,并在带有 switch 的构造函数中选择要分配的数据集。

一个非常简单的选项:

#include <stdexcept>

struct A
{
  int data1;
  float data2;
  char data3;
};

A factory(int option)
{
    switch (option)
    {
        case 0:
            return {1, 1.5, 'c'};
        case 1:
            return {2, 3, 'f'};
        case 2:
            return {42, 3.14, 'p'};
        default:
            throw std::runtime_error("bad option!");
    }
}

int main()
{
  A a = factory(get_init_option());  
  *do something with this data*
}