Cocos2dx游戏开发C++

小(大)问题[1]-这种写法会内存泄漏?

2016-10-28  本文已影响34人  qufl

今天突然想到一个问题,详情看代码吧。

奇怪的问题

#include <stdio.h>
#include <iostream>
class A
{
public:
    A() { std::cout << "i am A." << std::endl; }
    ~A() { std::cout << "release A." << std::endl; }
};

class B : public A
{
public:
    B() { std::cout << "i am B." << std::endl; }
    ~B() { std::cout << "release B." << std::endl; }
};

执行如下代码:

A *pA = new B();
delete pA;

此时看到的log如下:

i am A.
i am B.
release A.

那么,这个时候,class B的析构函数没有被调用到,(在class B的对象中包含其他对象,或者不包含其他对象的情况下)这样会导致内存泄漏吗?

避免上面的问题

对于上面问题,在不确定是否会导致内存泄漏前,写代码的时候可以注意将class的析构函数写为虚函数.示例如下:

#include <stdio.h>
#include <iostream>
class A
{
public:
    A() { std::cout << "i am A." << std::endl; }
    virtual ~A() { std::cout << "release A." << std::endl; }
};

class B : public A
{
public:
    B() { std::cout << "i am B." << std::endl; }
    ~B() { std::cout << "release B." << std::endl; }
};

再执行如下代码:

A *pA = new B();
delete pA;

看到的log就是这样了:

i am A.
i am B.
release B.
release A.

解答

还没有答案咯。

上一篇下一篇

猜你喜欢

热点阅读