如何让 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()
    {
    }
};

 

posted @ 2016-10-15 10:49  robnetcn  阅读(963)  评论(0编辑  收藏  举报