如何使指针超出范围

时间:2010-02-17 06:38:23

标签: c++ pointers reference variables scope

这不是我的代码,但它看起来很像

我有2个CTable类型的表。它们的工作方式与普通数组相同,但可以动态分配并调整大小。所以我们现在假装它们就是数组

一个表有对象引用

MyObj obj1;
MyObj obj2;

MyObj table1[10];
table1[0] = obj1;
table1[1] = obj2;

现在因为我想有时候对它们进行不同的排序,我已经在另一个表中指出了这些对象

MyObj *table2[10];
table2[0] = &table1[0];
table2[1] = &table1[1];

有没有办法通过table2获取对obj1和obj2的引用,这样这些对象在某种删除函数结束时会超出范围

类似

void free() {
MyObj &obj = *table2[0];
}

然后爆炸,在free结束时,obj会自动删除。此外,通过table2删除这些对象的某种方式是可以接受的。

2 个答案:

答案 0 :(得分:1)

如果要控制对象的生命周期,则需要动态分配它们。在这种情况下,您的代码看起来像这样:

vect2.push_back(new MyObj);
vect2.push_back(new MyObj);

void func() { 
    MyObj &obj = *vect2[0];
    // ...
    vect2.erase(vect2.begin());
    delete &obj;
}

答案 1 :(得分:0)

在你的情况下,只用指针就可以成为一个向量。

如果不合适,请尝试:

for(UINT i=0;i<vect1.size();++i)
{
    MyObj * p = &vect1[i];
    vect2.push_back(p);
}

//这是添加

的示例

P.S。

vector<MyObj*> vect2;
vect2.push_back(&obj1);
vect2.push_back(&obj2);

此代码错误