高手帮小弟我看看, 析够函数为什么不能够正常调用
高手帮我看看, 析够函数为什么不能够正常调用?
Class Object
{
public:
virtual Object(){std::cout<<"Object Created\n";};
}
Class TestA:Object
{
public:
TestA(){std::cout<<"TestA Created\n";};
~TestA(){std::cout<<"Destory TestA\n"};
}
Class TestB:Object
{
public:
TestB()
{
std::cout<<"TestB Created\n";
p = new int;
};
~TestB()
{
std::cout<<"Destory TestB\n"
delete p;
};
private:
int *p;
}
Class TestC
{
public:
TestC()
{
std::cout<<"TestC Created\n";
p = new int;
};
~TestC()
{
std::cout<<"Destory TestC\n"
delete p;
};
private:
int *p;
}
test1()
{
void *pTest = new TestB;
delete (TestA*)pTest;
}
test2()
{
void *pTest = new TestB;
delete (TestC*)pTest;
}
test3()
{
void *pTest = new TestB;
delete pTest;
}
void main()
{
test1();
test2();
test3();
}
请问这3个函数中 哪些会引起内存泄漏? 为什么?
------解决方案--------------------
Class Object
{
public:
virtual Object(){std::cout<<"Object Created\n";};
}
Class TestA:Object
{
public:
TestA(){std::cout<<"TestA Created\n";};
~TestA(){std::cout<<"Destory TestA\n"};
}
Class TestB:Object
{
public:
TestB()
{
std::cout<<"TestB Created\n";
p = new int;
};
~TestB()
{
std::cout<<"Destory TestB\n"
delete p;
};
private:
int *p;
}
Class TestC
{
public:
TestC()
{
std::cout<<"TestC Created\n";
p = new int;
};
~TestC()
{
std::cout<<"Destory TestC\n"
delete p;
};
private:
int *p;
}
test1()
{
void *pTest = new TestB;
delete (TestA*)pTest;
}
test2()
{
void *pTest = new TestB;
delete (TestC*)pTest;
}
test3()
{
void *pTest = new TestB;
delete pTest;
}
void main()
{
test1();
test2();
test3();
}
请问这3个函数中 哪些会引起内存泄漏? 为什么?
------解决方案--------------------
- C/C++ code
#include <iostream.h> class object { public: virtual ~object(){}; }; class testa:public object { public: testa() { cout<<"testa created\n"; } ~testa() { cout<<"destory testa\n"; } }; class testb:object { public: testb() { cout<<"testb created\n"; p = new int; }; ~testb() { cout<<"destory testb\n"; delete p; }; private: int *p; }; class testc { public: testc() { cout<<"testc created\n"; p = new int; } ~testc() { cout<<"destory testc\n"; delete p; }; private: int *p; }; void test1() { void *ptest = new testb; delete (testa*)ptest; //1)先调用了~testb(),之后调用了~object } void test2() { void *ptest = new testb; delete (testc*)ptest; //2)调用了~testc(),在执行其中的delete p; 语句时崩溃! } void test3() { void *ptest = new testb; delete ptest; // 3)没有调用析构函数 testb::~testb() } void main() { test1(); test2(); test3(); }
------解决方案--------------------
谁来答案? 偶关注了一天了
------解决方案--------------------
第三个明显有内存泄露,因为不会调用析构,为啥不调析构呢?因为delete掉的是个void*,编译器不知道调谁的析构.
------解决方案--------------------
#include<iostream>
class Object
{
public:
virtual ~Object(){};
} ;
class TestA:Object
{
public:
TestA(){std::cout<<"TestA Created\n";}
~TestA(){std::cout <<"Destory TestA\n";}
} ;
class TestB:Object
{
public:
TestB()
{
std::cout <<"TestB Created\n";
p = new int;
};
~TestB()
{
std::cout <<"Destory TestB\n" ;
delete p;
};
private:
int *p;
} ;
class TestC://Object
{
public:
TestC()
{
std::cout <<"TestC Created\n";
p = new int;
};
~TestC()
{
std::cout <<"Destory TestC\n";
delete p;
}
private:
int *p;
} ;
void test1()
{
void *pTest = new TestB;
delete (TestA*)pTest;