美文网首页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]-这种写法会内存泄漏?

    今天突然想到一个问题,详情看代码吧。 奇怪的问题 执行如下代码: 此时看到的log如下: i am A.i am ...

  • Android内存泄漏检测工具---LeakCanary

    前言:在Android开发中我们总是遇到这种那种的内存泄漏的问题,基于这种问题我们可以用Android内存泄漏工具...

  • Xcode调试工具

    一.静态内存分析工具 编译阶段查找内存泄漏等问题 1.常见内存泄漏问题 常见的内存泄漏除了循环引用,CoreFou...

  • Android内存泄漏相关

    问题1 内存泄漏的基本定义是什么?内存泄漏有什么危害?问题2 开发中常见的内存泄漏的情况有哪些?什么原因造成的?怎...

  • android 内存泄漏总结

    android 内存泄漏总结 前言 内存泄漏很危险。轻则卡顿,重则oom。这种东西写代码的时候注意一下就能避免90...

  • 三个方法帮助解决Android内存泄漏问题

    三个方法帮助解决Android内存泄漏问题 最近自己遇到了好几个内存泄漏的问题,也帮同事解决了几个内存泄漏的问题记...

  • 内存溢出和内存泄漏

    1.内存泄漏 2.内存溢出 -如何避免内存泄漏、内存溢出?

  • Android——内存泄漏

    性能优化----内存泄漏优化 一:什么是内存泄漏:内存不再GC的掌控之内了 了解几个问题(1) 垃圾回收机制 GC...

  • 内存泄漏

    什么是内存泄漏引起内存泄漏的原因野指针,空指针,僵尸对象 1.什么是内存泄漏 内存泄漏(Memory Leak)是...

  • 性能优化——内存泄漏(3)代码分析篇

    内存泄漏系列文章:性能优化——内存泄漏(1)入门篇性能优化——内存泄漏(2)工具分析篇性能优化——内存泄漏(3)代...

网友评论

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

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