每次调用函数时C ++新对象?

时间:2012-10-30 20:42:21

标签: c++ instance

我想要的是一个函数,每次调用它时都会创建一个新的不同实例(使用不同的名称......)

就像这样:

void person::new_person(){
  person *(id+index) = new person(name_temp, age_temp, quote_temp);
}

但它不起作用......我不知道该怎么做......(每次我创建一个新实例时索引都加一)。 我意识到每次我制作指针并在其上添加空格,就像那样:

int*p;
*(p+1) = 5;

它编译,但在运行时冻结(我把它得到的记忆不允许),以便"人*(id + index)"可能也行不通。 你怎么看?

3 个答案:

答案 0 :(得分:8)

尝试将person保存在标准容器中:

std::vector<person> people;
void person::new_person(std::string name, int age, std::string quote){
      people.push_back(person(name, age, quote));
}

答案 1 :(得分:5)

你的意思是这样的吗?

#include <string>

person make_person()
{
    static unsigned i = 0;
    return person(std::to_string(i++));
}

答案 2 :(得分:3)

  

“我想要的是一个函数,每次调用它时都会生成一个新的不同实例(使用不同的名称......)”

这就是所谓的构造函数,它是一种特殊的成员函数,与类同名。它没有函数结果类型,甚至没有void。它可以是这样的:

class Person
{
private:
    string name_;

public:
    Person( string name )
        : name_( name )
    {}
};

然后有多种方法可以调用它,具体取决于您希望存储新实例的位置。如,

int main()
{
    Person a( "A" );    // Local variable
    Person( "B" );      // A temporary, it's already destroyed... ;-)
    vector< Person > v;
    v.emplace_back( "C" );    // As a new item at the end of vector.
}

加上一些,但我猜上面的三种方式与完全初学者最相关。

请注意,使用向量时,每次push_backemplace_back时,您都会使用新索引创建新的最后一项。调用size方法可以找出您当前在向量中有多少项。 查看文档以获取更多信息。

顺便说一下,你应该给自己做一本教科书。