类中的指针/释放内存

Pointers in class / freeing memory

本文关键字:释放 内存 指针      更新时间:2023-10-16

这可能是指针101…但奇怪的是(对我来说)很难找到答案。

在下面的示例中,所有内容都将被自动正确删除,还是我必须手动删除一些?这也包括Test t

我的答案是肯定的,一切都被释放了,除非我明确地使用new,但我远不能确定。

谢谢。

#include <iostream>
#include <vector> 
class Obj
{
    public:
        Obj(int num) : m_num(num) {}
        int getNum() { return m_num; }
    private:
        int m_num;
};
class Test
{
    public:
        Test(Obj *po) : m_po(po) {}
        void print()
        {
            std::cout << m_po->getNum() << std::endl;
        }
    private:
        Obj *m_po;
};
class Test2
{
    public:
        Test2() {}
        void add(Obj &o)
        { m_vo.push_back(&o); }
        void print()
        {
            for (size_t i=0; i<m_vo.size(); ++i)
                std::cout << m_vo[i]->getNum() << std::endl;
        }
    private:
        std::vector<Obj*> m_vo;
};
int main(int argc, char** argv) 
{
    Obj o1(1);
    Obj o2(2);
    Test t(&o1);
    t.print();
    Test2 t2;
    t2.add(o1);
    t2.add(o2);
    t2.print();
    //Would there be other uses of those objects t and t2 that could require a manual delete () ?
  return(0);
}

你的分析是准确的。您没有使用newmalloc或等同物。所以你不需要负责释放任何东西

是的,所有对象都将被正确销毁和释放,因为其中的所有对象都具有自动存储持续时间。只有具有动态存储持续时间的对象(由newnew[]创建的对象)需要手动释放(分别由deletedelete[])