如何生成C ++动态对象名称?

时间:2009-06-20 15:44:23

标签: c++ arrays dynamic pointers object

我想基于用户输入的数量/数量生成许多对象(在C ++中)。

现在我已经听说必须使用指针技巧完成,创建一个指向所需Object类型数组的指针,然后动态增加数组的大小(在运行时)。

是否有直接使用名称的解决方法           Object1,Object2 ..... ObjectX 而不是拥有           Classname * Object [] 然后使用数组索引来获取对象?

在任何一种情况下,如果有人能够澄清这个问题,那就太好了。

谢谢!

5 个答案:

答案 0 :(得分:8)

如果你想要动态大小的数组,那么使用std :: vector。您将无法调整内置阵列的大小。 如果你想能够通过字符串名称获取对象,那么你应该使用std :: map,它有一个索引器:

std::map<string, Classname> myMap;
myMap["Object1"] = Classname();
Classname newClassname = myMap["Object1"];

答案 1 :(得分:6)

到目前为止,还没有人解释为什么你的想法存在缺陷。 C ++是一种编译语言,它将源程序变成高效的机器代码。因此,只有在编译时,当您将源代码转换为可执行文件时,程序才能使用您提供变量的名称。之后,当您想要动态创建对象时,这些类型的信息将不再可用。程序只知道机器指令操作数所在的机器地址。

答案 2 :(得分:3)

不,没有。而且,你不需要;使用std::vector

答案 3 :(得分:3)

9年前,当我开始编程时,我问自己同样的问题。答案是:你做不到。

您确实可以使用数组并动态调整大小,但使用stl向量会更容易(一旦您学会了如何使用它)。

答案 4 :(得分:3)

你不能这样做,因为C ++没有可以驻留变量(和元数据)的“环境”(reflection)。此外,在C ++中,编译代码时,所有变量名称都消失
实现所需效果的一种方法是使用Map,其中键是字符串。