类中的指针/释放内存
Pointers in class / freeing 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);
}
你的分析是准确的。您没有使用new
或malloc
或等同物。所以你不需要负责释放任何东西
是的,所有对象都将被正确销毁和释放,因为其中的所有对象都具有自动存储持续时间。只有具有动态存储持续时间的对象(由new
或new[]
创建的对象)需要手动释放(分别由delete
或delete[]
)
相关文章:
- 如何在c++中释放内存
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- std::unordered_map析构函数不释放内存?
- 在C++中释放内存期间,迭代器与指针有何不同
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 释放内存(主题模板)时出现问题
- 使用后自动释放内存
- C++ 如何释放内存
- 从函数内对象的向量中释放内存
- C++ 在不释放内存的情况下调用析构函数
- 多个线程之间的获取-释放内存顺序
- C++ - 析构函数只是释放内存还是实际删除对象
- 使用 RAII 替换最终块以释放内存
- 如何通过带有指向基类的指针的删除运算符释放内存
- 代码中的"sprintf"用法是否需要释放内存?
- C++何时使用 delete[] 并正确释放内存?
- 为什么此获取和释放内存围栏不能给出一致的值?
- 抛出新表达式的参数子表达式时释放内存
- 在这种情况下,如何释放内存?
- 在 c++ 中应按什么顺序释放内存?