1. 題目
class Fruit{test
int no;
double weight;
char key;
public:
void print() { }
virtual void process(){ }
};
class Apple: public Fruit{
int size;
char type;
public:
void save() { }
virtual void process(){ }
};
為上述類型 Fruit和Apple 添加 構(gòu)造函數(shù)與 析構(gòu)函數(shù), 并在構(gòu)造函數(shù)與析構(gòu)函數(shù)中打印控制臺(tái)信息,觀察構(gòu)造和析枸調(diào)用過程。然后為Apple類重載::operator new和 ::operator delete,在控制臺(tái)打印信息,并觀察調(diào)用結(jié)果。
2. 思考
2.1 構(gòu)建operator new和operator new[]的基本要求
- 返回值是
void * - 第一個(gè)參數(shù)是
size_t類型 - 需要判斷分配是否成功
inline
void* Apple::operator new(size_t size)
{
if (Apple* p = (Apple*)malloc(size))
{
cout << "Call Apple::operator new(). Size = " << size << " ptr = " << p << endl;
return p;
}
else
throw bad_alloc();
}
inline
void* Apple::operator new[](size_t size)
{
if (Apple* p = (Apple*)malloc(size))
{
cout << "Call Apple::operator new[]. Size = " << size << " ptr = " << p << endl;
return p;
}
else
throw bad_alloc();
}
2.2 書寫operator delete 和 operator delete[] 要求
- 返回值必須是
void - 第一個(gè)參數(shù)必須是
void*
inline
void Apple::operator delete(void* ptr, size_t size)
{
cout << "Call Apple::operator delete. Size = " << size << " ptr = " << ptr << endl;
}
inline
void Apple::operator delete[](void* ptr, size_t size)
{
cout << "Call Apple::operator delete[]. Size = " << size << " ptr = " << ptr << endl;
}
2.3 C++ Primer - P823

3. 編譯
g++ homework5.cpp -o homework5 -std=c++11
4. 結(jié)果分析

