美文网首页Cocos2dx游戏开发C++
小(大)问题[1]-这种写法会内存泄漏?

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

作者: qufl | 来源:发表于2016-10-28 20:52 被阅读34次

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

    奇怪的问题

    #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.

    解答

    还没有答案咯。

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/femeuttx.html