2010-02-17 117 views
1

这不完全是我的代码,但它看起来很像它如何让指针超出范围

我有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]; 

有没有办法打通表2的引用OBJ1和OBJ2所以这些对象将在某种删除功能的结束走出范围

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

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

+1

究竟应该发生什么?该物体是否应该从表格中删除? – sth 2010-02-17 07:13:06

+0

您是否需要scopeguard(http://www.drdobbs.com/cpp/184403758)实施?你将如何调用删除功能? – Andy 2010-02-17 08:33:24

回答

0

在你的情况下,它只是一个只有指针的向量。

如果它不符合试试这个:

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

//这是例如添加

的附言如果你想控制对象的生命周期

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

这个代码是错误的

+0

是的,你是对的我的例子不好 – Eric 2010-02-17 06:50:06

1

,你需要动态分配它们。在这种情况下,你的代码看起来像这样:

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

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