查看: 1463|回复: 13

在GCCAVR C++中如何重载new [复制链接]

hotpower (离线)
积分
82854
帖子
313
发表于 2009-4-2 23:05:15 |显示全部楼层
关键词: GCCAVR , new , 重载
hotpower 发表于 2005-1-31 00:24

在GCCAVR C++中如何重载new,delete

void * operator new (size_t size)
{
void * ptr;
  ptr = malloc(size);
  if (!ptr) return ptr;
  memset(ptr, '\0', size);
  return ptr;
}


void  operator delete(void * obj)
{
  free(obj);
}

应用:
inline String::String(const char * str)
{
  if (!str) {
    _size = 0;
    _string = 0;
  }
  else {
    _size = strlen(str);
    _string = new char(_size + 1);
    strcpy(_string, str);
  }
}

inline String & String:perator = (const char * s)
{
  if (!s) {
    _size = 0;
    delete _string;
    _string = 0;
  }
  else {
    _size = strlen(s);
    delete _string;
    if (_size == 0) _string = 0;
    else {
      _string = new char(_size + 1);
      strcpy(_string, s);
    }
  }
  return *this;
}
●█〓██▄▄▄▄▄▄ ●●●●●●→ ''''╭WWWW╮
▄▅██████▅▄▃▂ 传播非典灌水四方 ( ●_●)
███天█马█行█空████ '''',,,;,;,;'''/▇\''
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤ 群魔乱舞见阳光/MMMM\
hotpower (离线)
积分
82854
帖子
313
发表于 2009-4-2 23:05:56 |显示全部楼层
可恨的
●█〓██▄▄▄▄▄▄ ●●●●●●→ ''''╭WWWW╮
▄▅██████▅▄▃▂ 传播非典灌水四方 ( ●_●)
███天█马█行█空████ '''',,,;,;,;'''/▇\''
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤ 群魔乱舞见阳光/MMMM\
hotpower (离线)
积分
82854
帖子
313
发表于 2009-4-3 23:28:53 |显示全部楼层
2个“:”后跟o就坏事了
●█〓██▄▄▄▄▄▄ ●●●●●●→ ''''╭WWWW╮
▄▅██████▅▄▃▂ 传播非典灌水四方 ( ●_●)
███天█马█行█空████ '''',,,;,;,;'''/▇\''
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤ 群魔乱舞见阳光/MMMM\
admin (离线)
积分
891772
帖子
2438
发表于 2009-4-4 00:04:43 |显示全部楼层
::O
admin (离线)
积分
891772
帖子
2438
发表于 2009-4-4 00:05:21 |显示全部楼层
::O
hotpower (离线)
积分
82854
帖子
313
发表于 2009-4-4 00:35:25 |显示全部楼层
C++中运算符重载operator是不允许大写O的~~~

俺的程序都是源码,不可能误导人民群众。
所以本站很不顺也~~~
●█〓██▄▄▄▄▄▄ ●●●●●●→ ''''╭WWWW╮
▄▅██████▅▄▃▂ 传播非典灌水四方 ( ●_●)
███天█马█行█空████ '''',,,;,;,;'''/▇\''
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤ 群魔乱舞见阳光/MMMM\
李冬发 (离线)
积分
7509
帖子
116
发表于 2009-4-6 14:59:06 |显示全部楼层
呵呵
老郭 (离线)
积分
873447
帖子
5419
发表于 2009-4-6 15:33:04 |显示全部楼层
这也太幽默了~
李冬发 (离线)
积分
7509
帖子
116
发表于 2009-4-24 22:59:16 |显示全部楼层
经常有这个问题。

  1. ::o
复制代码
李冬发 (离线)
积分
7509
帖子
116
发表于 2009-4-24 23:00:29 |显示全部楼层
用代码就不会了
李冬发 (离线)
积分
7509
帖子
116
发表于 2009-4-24 23:01:25 |显示全部楼层
这样就好了。
  1. 在GCCAVR C++中如何重载new,delete

  2. void * operator new (size_t size)
  3. {
  4. void * ptr;
  5.   ptr = malloc(size);
  6.   if (!ptr) return ptr;
  7.   memset(ptr, '\0', size);
  8.   return ptr;
  9. }


  10. void  operator delete(void * obj)
  11. {
  12.   free(obj);
  13. }

  14. 应用:
  15. inline String::String(const char * str)
  16. {
  17.   if (!str) {
  18.     _size = 0;
  19.     _string = 0;
  20.   }
  21.   else {
  22.     _size = strlen(str);
  23.     _string = new char(_size + 1);
  24.     strcpy(_string, str);
  25.   }
  26. }

  27. inline String & String::operator = (const char * s)
  28. {
  29.   if (!s) {
  30.     _size = 0;
  31.     delete _string;
  32.     _string = 0;
  33.   }
  34.   else {
  35.     _size = strlen(s);
  36.     delete _string;
  37.     if (_size == 0) _string = 0;
  38.     else {
  39.       _string = new char(_size + 1);
  40.       strcpy(_string, s);
  41.     }
  42.   }
  43.   return *this;
  44. }
复制代码
bakedham (离线)
积分
44313
帖子
90
发表于 2009-4-25 01:12:51 |显示全部楼层
恩。真有办法
hotpower (离线)
积分
82854
帖子
313
发表于 2009-6-10 00:58:01 |显示全部楼层
搞不清楚~~~
pcbkey (离线)
积分
1662
帖子
1485
发表于 2015-2-7 10:10:02 |显示全部楼层
支持一下
您需要登录后才可以发表评论 登录 | 立即注册

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备11013910号 | 京公网安备11010502021702
回顶部