思考:在C++类中,通过设计类的构造和析构函数,就已经把复杂的内存管理起来了. 及时是简单的结构体,也是有构造和析构函数的,而下面这种情况,可以在非结构中使用.

/** Operator Overload new and delete */

#include <iostream>
#include <cstdlib>
#include <new> using namespace std; class MyClass{
public:
MyClass(){ x = y = 0; }
MyClass(int lg, int lt) {
x = lg;
y = lt;
}
void show(){
cout << x << " ";
cout << y << endl;
} void *operator new(size_t size);
void operator delete(void *p);
void *operator new[](size_t size);
void operator delete[](void *p); private:
int x, y;
}; /** overloaded new operator */
void *MyClass::operator new(size_t size){
void *p;
cout << "In overloaded new.\n";
p = malloc(size);
if(!p){
bad_alloc ba;
throw ba;
}
return p;
} /** delete operator overloaded */
void MyClass::operator delete(void *p){
cout << "In overloaded delete.\n";
free(p);
} /** new operator overloaded for arrays. */
void *MyClass::operator new[](size_t size){
void *p;
cout << "Using overload new[].\n";
p = malloc(size);
if(!p){
bad_alloc ba;
throw ba;
}
return p;
} /** delete operator overloaded for arrays. */
void MyClass::operator delete[](void *p)
{
cout << "Freeing array using overloaded delete[]\n";
free(p);
} int main()
{
MyClass *objectPointer1, *objectPointer2;
int i; try{
objectPointer1 = new MyClass (10, 20);
}catch (bad_alloc xa){
cout << "Allocation error for objectPointer1.\n";
return 1;;
} try{
objectPointer2 = new MyClass [10];
} catch (bad_alloc xa) {
cout << "Allocation error for objectPointer2.\n";
return 1;
} objectPointer1->show();
for( i = 0; i < 10; i++){
objectPointer2[i].show();
} delete objectPointer1;
delete [] objectPointer2; return 0;
}

Cplus Overolad new and delete Operator的更多相关文章

  1. C++ delete operator做了什么事

    1.C++中的delete operator做了两件事:调用析构方法和调用operator delete释放内存. 2.考虑析构方法,如果析构方法是虚方法,调用指针真实类型的析构方法,否则调用表面类型 ...

  2. C++ new operator, delete operator, operator new, operator delete, new placement

    http://www.younfor.com/cpp-new-placement-new-operator-new.html http://www.cnblogs.com/luxiaoxun/arch ...

  3. C++中的new/delete与operator new/operator delete

    new operator/delete operator就是new和delete操作符,而operator new/operator delete是函数. new operator(1)调用opera ...

  4. 定制自己的new和delete:operator new 和 operator delete

    new和delete不同用法 基本用法 int * aptr = new int(10); delete aptr, aptr = nullptr; 上面的代码是我们最基本也是最常见的使用new和de ...

  5. C++中new和delete的背后

    关于 C++中new背后的行为, 以前已经写过一篇了 理解C++中new背后的行为, 但是里面也只是泛泛而谈,没有真凭实据, 下面我们从汇编的角度看C++编译器究竟在背后干了什么? 我们的代码很简单, ...

  6. operator new与new operator的区别

    原文地址:http://www.cnblogs.com/jamesmile/archive/2010/04/17/1714311.html,在此感谢 C++中的operator new与new ope ...

  7. 函数定义从零开始学C++之从C到C++(一):const与#define、结构体对齐、函数重载name mangling、new/delete 等

    今天一直在学习函数定义之类的问题,下午正好有机会和大家共享一下. 一.bool 类型 逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC+ ...

  8. 【M8】了解各种不同意义的new和delete

    1.首先考虑new operator,new operator 可以认为做了三件事情:a.调用operator new分配一块内存:b.在这块内存上调用构造方法构造对象:返回指针. 2.operato ...

  9. Effective C++ 第二版 17)operator=检查自己 18)接口完整 19)成员和友元函数

    条款17 在operator=中检查给自己赋值的情况 1 2 3 class  X { ... }; X a; a = a;  // a 赋值给自己 >赋值给自己make no sense, 但 ...

随机推荐

  1. Leetcode 1023. Camelcase Matching

    暴力查找 class Solution: def camelMatch(self, queries: List[str], pattern: str) -> List[bool]: q_size ...

  2. HDU - 4676 :Sum Of Gcd (莫队&区间gcd公式)

    Given you a sequence of number a 1, a 2, ..., a n, which is a permutation of 1...n. You need to answ ...

  3. JS 实战1(添加、删除)

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs ...

  4. ZeroClipboard.js兼容各种浏览器复制到剪切板上

    http://www.cnblogs.com/huijieoo/articles/5569990.html <script type="text/javascript" sr ...

  5. bzoj 3730 震波——动态点分治+树状数组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3730 查询一个点可以转化为查询点分树上自己到根的路径上每个点对应范围答案.可用树状数组 f ...

  6. VHF、UHF的频率范围

    1.VHF意思是甚高频,2.UHF意思是超高频,即ultra-high freqency ,电视搜台显示的是当前频率段名,最高不超过470M,因为带增补的高频头标准就是470M3.这是对讲机专业机的工 ...

  7. MAMP pro mac 本地集成环境 php sal apache等集成软件

    http://www.sdifen.com/mamppro411.html 已存在我的百度云盘 安装后,打开  MAMP 第一步:配置启动和停止选项 默认启动项.默认停止项,只需要勾选: 1.Star ...

  8. 源文件封装为IP的步骤

    因为模块的交接,最好将写好的源文件和生成的IP封装一个IP,然后再转交给其他的同事使用,这是一种好的习惯.但是对于,封装的过程还是需要注意一下.实际的看看步骤吧.1)将源文件和使用到的IP生成工程. ...

  9. 使用css弹性盒子模型

    提示: 当期内容不充实, 修改后再来看吧 以下称:弹性子元素: 子元素, 弹性容器: 容器 弹性盒子的属性 1. css弹性盒子模型规定了弹性元素如何在弹性容器内展示 2. 弹性元素默认显示在弹性容器 ...

  10. 传统项目利用Hystrix实现热点接口的服务隔离

    这段时间接了个需求,需要在我目前负责的数据系统上加个接口,主要是实现用户行为的记录.前端对接的项目主要有公司的PC,WAP,WEIXIN,APP等,每个端大概有两台左右的负载.因为目前我的这个项目主要 ...