定位New

lee_鹿游原 2012-01-16 02:39:29

#include <iostream>
#include <new>

const int chunk = 16;
class Foo
{
public:
int val() { return _val; }
Foo() { _val = 0; }
private:
int _val;
};
char *buf = new char[ sizeof(Foo) * chunk ];
int main()
{
Foo *pb = new (buf) Foo;

if ( pb->val() == 0 )
std::cout << "new expression worked!" << std::endl;

delete[] buf;
return 0;
}
//感觉定位new用的比较少,平常都用在哪些地方呢。明天回家了,送一下分..
...全文
186 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
面包大师 2012-01-16
  • 打赏
  • 举报
回复
内存池
lee_鹿游原 2012-01-16
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 ken_scott 的回复:]

C/C++ code

"二斗墨汁"


名字都写错了
[/Quote]
以为你是故意的..
myxia66 2012-01-16
  • 打赏
  • 举报
回复
new 不是函数 只是个操作符。
个人一般用malloc 哈哈
ken_scott 2012-01-16
  • 打赏
  • 举报
回复

"二斗墨汁"

名字都写错了
平凡的思想者 2012-01-16
  • 打赏
  • 举报
回复
重载全局的new操作符,然后在自定义new操作符函数中打印文件名和行号,就可以定位那些地方使用了new。
一般的内存泄漏检查工具都是这么实现的。
ken_scott 2012-01-16
  • 打赏
  • 举报
回复

m_name[size - 1] = '\0';
ken_scott 2012-01-16
  • 打赏
  • 举报
回复
内存池
另外 可以覆盖/修改一个对象

#include <cstring>
#include <iostream>
using namespace std;

struct Name
{
Name(char * name = "")
{
int size = strlen(name) + 1;
if (size > 20) {
size = 20;
}
strncpy(m_name, name, size);
}

char m_name[20];
};

int main()
{
Name a;
cout << a.m_name << endl;
new (&a) Name("Adward Ink");
cout << a.m_name << endl;
new (&a) Name("二斗墨之");
cout << a.m_name << endl;

return 0;
}
呆呆猫 2012-01-16
  • 打赏
  • 举报
回复
stl中容器实现源码中用的挺多的~~~
lusedeya6 2012-01-16
  • 打赏
  • 举报
回复
内存池
lee_鹿游原 2012-01-16
  • 打赏
  • 举报
回复
嗯,需要研究内存池.....
healer_kx 2012-01-16
  • 打赏
  • 举报
回复
我了解的就是 内存池了。。。
downmooner 2012-01-16
  • 打赏
  • 举报
回复
内存池,定位new 数组时楼主可要小心了。
iamnobody 2012-01-16
  • 打赏
  • 举报
回复
就是在一个确定的位置构造一个对象。在管理内存等地方用。
开发者说 2012-01-16
  • 打赏
  • 举报
回复
在做内存池的时候会有用到

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧