【发布时间】:2015-05-13 22:30:01
【问题描述】:
我不是 100% 确定我为这个权利写了标题,所以这就是我想要做的......
我有一个这样定义的类...
class Animal
{
public:
Animal() : m_name("New Animal")
{
}
Animal(const std::string& name) : m_name(name)
{
}
Animal(const Animal& animal) : m_name(animal.name)
{
}
private:
const std::string name;
};
然后我像这样初始化这个类的一个对象......
Animal* m_animal = new Animal("Leroy");
在我的程序中的某个时刻,用户将单击一个按钮,这将导致 m_animal 变为空。这意味着名为 Leroy 的宠物不应该再存在了..
我以为我可以使用 delete m_animal,但是一旦我调用它,我就不能再使用 m_animal 而不会导致内存分配错误。
所以我想我的问题是...... 我使用以下代码会导致内存泄漏,因为名为 Leroy 的宠物没有被删除……如果是这样,有什么替代方法可以完成这项工作?
m_pet = NULL;
整个过程应该是这样的……
Animal* m_animal = new Animal("Leroy");
Animal* m_animal2 = new Animal("Boo");
std::cout << m_animal.name << endl;
m_animal = NULL;
m_animal = new Animal(m_animal2);
std::cout << m_animal.name << endl;
【问题讨论】:
-
是的,这是内存泄漏
-
使用
m_animal->name而不是m_animal.name,因为它是一个指针。
标签: c++ class object initialization