课堂上的指针/释放记忆

时间:2013-04-20 16:11:34

标签: c++ pointers memory

这可能是指针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);
}

2 个答案:

答案 0 :(得分:2)

您的分析准确无误。您没有使用newmalloc或等价物。因此,您不负责取消分配任何内容。

答案 1 :(得分:2)

是的,所有内容都将被正确销毁和解除分配,因为其中的所有对象都有自动存储持续时间。只有动态存储持续时间的对象(由{{1创建的对象)需要手动释放{}或new}(分别由new[]delete)。