如何管理对象的初始化数据?
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*
}
我进退两难,很乐意听取在 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*
}