查看: 4044|回复: 13

在GCCAVR C++中如何重载new

[复制链接]
发表于 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;
}
 楼主| 发表于 2009-4-2 23:05:56 | 显示全部楼层
可恨的
 楼主| 发表于 2009-4-3 23:28:53 | 显示全部楼层
2个“:”后跟o就坏事了
发表于 2009-4-4 00:04:43 | 显示全部楼层
::O
发表于 2009-4-4 00:05:21 | 显示全部楼层
::O
 楼主| 发表于 2009-4-4 00:35:25 | 显示全部楼层
C++中运算符重载operator是不允许大写O的~~~

俺的程序都是源码,不可能误导人民群众。
所以本站很不顺也~~~
发表于 2009-4-6 14:59:06 | 显示全部楼层
呵呵
发表于 2009-4-6 15:33:04 | 显示全部楼层
这也太幽默了~
发表于 2009-4-24 22:59:16 | 显示全部楼层
经常有这个问题。

  1. ::o
复制代码
发表于 2009-4-24 23:00:29 | 显示全部楼层
用代码就不会了
发表于 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. }
复制代码
发表于 2009-4-25 01:12:51 | 显示全部楼层
恩。真有办法
 楼主| 发表于 2009-6-10 00:58:01 | 显示全部楼层
搞不清楚~~~
发表于 2015-2-7 10:10:02 | 显示全部楼层
支持一下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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