• 如何让 C++ 和 C# 一样易用,而且效率更高?


    (未完成,待续。。)

    第一章:C++基本功

    1. 养成良好的编码习惯。

    2. 堆上的资源随用随还,严格控制生命周期。

    第二章:一些调试心得

    1. 在VisualStudio环境下,曾出现 Detected memory leaks!,调试很久,有如下心得:

    a. 可以逐步简化程序,确认问题点,同时使用 _CrtSetBreakAlloc(x) 辅助查找问题。

    b. 使用 Borland 公司开发的 DevPartner,比较强大。

    2. 一处 class 继承 后的问题。

    在 C#中,几乎不用担心内存问题,而C++中则有些区别。

     1 class A
     2 {
     3 protected:
     4     int * p1;
     5 };
     6 
     7 class A1 : class A
     8 {
     9     A1()
    10     {
    11         p1 = new int[10];
    12     }
    13     ~A1()
    14     {
    15         delete [] p1;
    16     }
    17 };

    以上代码,可能会报 内存泄露的错误。比如按以下方式调用:

    1 A * a = new A1();
    2 delete a;

    实际析构方式是: ~A(), 就截至了,并没有调用 ~A1()。 这导致内存泄露。

    所以:int * p1 是基类的成员,就应该有基类来释放。子类想使用可以,但是仅限于使用,不能拥有(即:构造、析构都不应该由它来管理)。

    修改后的代码如下:

    class A
    {
    protected:
        int *     m_p1;
        
    public:
        A(int p1_count)
        {
            m_p1 = new int[p1_count];
        }
        ~A()
        {
            delete [] p1;
        }
    };
    
    class A1 : class A
    {
        A1() : A(10)
        {
        }
        ~A1()
        {
        }
    };
  • 相关阅读:
    return和yield的区别
    基本装饰器
    javascript实例:两种方式实现tab栏选项卡
    javascript实例:路由的跳转
    javascript实例:点亮灯泡
    标签页QTabWidget
    主窗口QMainWindow和启动画面
    各种对话框
    列表视图QlistView
    拆分窗口QSplitter
  • 原文地址:https://www.cnblogs.com/robnetcn/p/5962925.html
Copyright © 2020-2023  润新知