【问题标题】:How to get a pointer out of scope如何使指针超出范围
【发布时间】:2011-01-17 17:43:47
【问题描述】:

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

我有 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 删除这些对象的某种方式也是可以接受的。

【问题讨论】:

  • 那里究竟应该发生什么?应该从表中删除对象还是什么?
  • 您需要实施 scopeguard (drdobbs.com/cpp/184403758) 吗?你将如何调用删除函数?

标签: c++ pointers reference variables scope


【解决方案1】:

如果您想控制对象的生命周期,则需要动态分配它们。在这种情况下,您的代码将如下所示:

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

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

【讨论】:

    【解决方案2】:

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

    如果不合适试试这个:

    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);
    

    此代码错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多