有没有一种方法可以通过使用指针来处理作用域

Is there a way to work around scope by using pointers?

本文关键字:指针 作用域 处理 可以通过 方法 一种 有没有      更新时间:2023-10-16

取以下代码

void save(){
    Classname object(aString, aInt);
    this->getVector().push_back(&object);
}

我试图将对象的副本保存到这个类的向量中,但我知道这不起作用,因为一旦我离开save(),对象就会被删除,所以我的问题是如何解决这个问题?我很欣赏一些代码示例,因为我是从java迁移过来的,可能不理解这些指针魔法。

编辑:英语edit2:复制粘贴永远不起作用!

首先,不需要this->,你可以说

getVector().push_back(...);

其次,由于您使用了this->,我推断savegetVector是同一类的两个成员函数;如果getVector所做的只是访问一个也是类成员的向量(没有任何像懒惰实例化这样的技巧),那么你也不需要它,你可以直接处理这个向量:

theVector.push_back(...)

现在回答你的问题。你说得对,如果object在堆栈上,它就会超出作用域。但你可以在堆上动态构建它,它将一直存在,直到被删除:

void save(){
    Classname *ptr = new Classname(aString, aInt);
    theVector.push_back(ptr);
}

现在ptr将超出范围,但添加到向量的ptr的副本不会,并且指针仍将指向对象。

由于您希望使用多态性,我想您希望向量包含基类指针,这些指针实际上可以指向派生类的对象。没有问题:

void save(){
    Animal *ptr = new Aardvark(aString, aInt);
    theVector.push_back(ptr);   // <-- the vector is of type vector<Animal*>
}