在函数块中创建的指针会被删除吗?c++

Do pointers created in a function block get deleted? c++

本文关键字:删除 c++ 指针 函数 创建      更新时间:2023-10-16

我正在尝试生成一个电话簿代码,我有一个带有姓名和号码的person类。我正在生成这些名称,然后将它们写入一个文件。

我创建了一个人物指针向量,然后将它们分配到一个单独的函数中。不过,在代码执行之后,我一直得到NULL。如果我创建了这个人物指针向量,然后在函数结束时将其传递给生成人物对象的函数,我会丢失这些引用吗?新对象不应该在堆中创建,并且如果它们被引用回向量,它们仍然存在吗?我认为指针是在main的堆栈中创建的,仍然是可行的,然后被引用到堆中的一个位置,所以我不明白为什么我的所有值都为NULL?

这是我的代码:

int main(){
    vector<Person*> people(10);
    phone_gen(people);
   return 1;
}
void phone_gen(vector<Person*> a){
        cout << "Numbers generated n";
        a[0] = new Person("Mike", 6044219901);
        a[1] = new Person("John" , 6041929402);
        a[2] = new Person("Ted"  , 6044211234);
        a[3] = new Person("Stern", 6044211233);
        a[4] = new Person("fred ", 6044211111);
        a[5] = new Person("ben  ", 6049999999);
        a[6] = new Person("timmy", 6044211113);
        a[7] = new Person("lowe ", 6044210908);
        a[8] = new Person("Glenn", 6044217112);
        a[9] = new Person("Danny", 6044211112);

    }

这里的问题是通过值传递参数,这意味着向量被复制,函数只对副本有效,而对原始函数无效。

您应该通过引用传递参数

void phone_gen(vector<Person*>& a)
//                            ^
//                            |
//          Note ampersand here

为了在phone_get函数中填充people向量,您必须通过引用获得它:

void phone_get(vector<Person*>& a){...}

否则,您将在vector(10个空指针)中看到10个默认构造的对象