返回狼盟编程首页
编程搜索 [狼盟旧档]
论坛统计


请输入搜索关键字:
├─◆ 狼盟首页 > 查看贴子 > 详细信息

楼主

哪位大虾能给我讲讲这个内存泄漏问题??(C++)


源文件如下:



#include <iostream>



class SimpleCat

{

public:

   SimpleCat (int age, int weight);

   ~SimpleCat() {}

   int GetAge() { return itsAge; }

   int GetWeight() { return itsWeight };

   

private:

   int itsAge;

   int itsWeight;

};



SimpleCat::SimpleCat(int age, int weight)

{

   itsAge=age;

   itsWeight=weight;

}



SimpleCat & Function();



int main()

{

    SimpleCat & rCat= TheFunction();

    int age=rCat.GetAge();

    std::cout<<"rCat is "<<age<<" years old!
";

    std::cout<<"&rCat: "<<&rCat<<std::endl;



    SimpleCat * pCat=&rCat;

    delete pCat;



    return 0;

}



SimpleCat & TheFunction()

{

    SimpleCat * pFrisky=new SimpleCat(5,9);

    std::cout<<"pFrisky: "<<pFrisky<<std::endl;

    return *pFrisky;

}



在main()中的这些行

    std::cout<<"rCat is "<<age<<" years old!
";

    std::cout<<"&rCat: "<<&rCat<<std::endl;



    SimpleCat * pCat=&rCat;

    delete pCat;



书上说为了释放内存而用了这种方法(因为引用不能用DELETE),但是    delete pCat;之后rCat就成了一个无效的引用(因为引用了一个空对象,而引用不能引用空对象),这是为什么?怎么就成了空对象??我不太明白耶??





略知皮毛 [ 1 楼 ]
2004-08-31 23:30:00
如果在程序中使用了new,就必须使用delete,否则会造成内存泄漏。实际上在你的程序中也这么做了。*pCat和rCat是同一个对象,delete pCat;之后rCat自然就成了一个无效的引用了。