//PngFile.h
class CPngFile 
{
    public:
CPngFile()
         { 
            pchar = new char[1000];
            nCount = 100;
         }
    prirate:
         char *pchar;
         int  nCount;
}void main()
{
    CPngFile *pCPng = new CPngFile ;
}
--------------------------------------------------------------------------------------   
 问题:
     nCount 是放在栈内存还是堆内存中?如果是栈内存,哪CPngFile *pCPng = new CPngFile不是分配一块堆内存吗?如果是在堆内存中,int  nCount这个不是一般是分配到栈内存吗?

解决方案 »

  1.   

    这个应该是分到堆内存中的.我不明白你为什么要说一般是分配在栈内存.根据是什么?
    一个类的实例中只有数据和虚函数表的指针.如果这个类,你是使用 CPngFile pCPng;
    那么这些数据应该是分在栈内的.你new出一块内存.这肯定是分在堆上的.这块内存就包括了int nCount这个成员.
      

  2.   

    楼主的意思是不是说,像int nCount;之类的定义一般来说是在栈区,
    但是,你的这个类对象是在堆区分配的,其内部的成员也应该是在堆区的。
      

  3.   

    CPngFile *pCPng = new CPngFile ;这里的new其实就是调用构造函数,注意和malloc的区别int  nCount//既然是局部变量,当然是在栈中分配空间
      

  4.   

    当然pCPng 指针是在堆中的
      

  5.   

    to rageliu
    没太懂你的意思
      

  6.   

    如果是在堆内存中,int  nCount这个不是一般是分配到栈内存吗????分配到栈上的是局部变量啊,nCount是局部变量吗?
      

  7.   

    So Sorry没看清楚,我上面全说错了
      

  8.   

    没看到nCount是类的成员变量,而pCPng 是一个局部指针!哎,我去跳楼了,谁也别拦我...
      

  9.   

    mfc变量是在栈上分布的。
    比如:声明 Cobject aa; 那么不用调用 aa.create就可以直接访问aa了。如果new一个类对象,则内存是在堆上分配的。但指向内存的指针pCPng还是在栈上的。
      

  10.   

    楼上说的“mfc变量是在栈上分布的。”这个结论比较怪……
      

  11.   

    “mfc变量是在栈上分布的。”我完全看不明白^_^
      

  12.   

    哈哈 class这段只是声明一种类型,类型声明中的变量是不分配内存的,都要在new的时候分配。所楼主的例子都是在堆里分配的