首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

定位New,该如何处理

2012-02-05 
定位NewC/C++ code#include iostream #include newconst int chunk 16 class Foo{ public:int val(

定位New

C/C++ code
#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用的比较少,平常都用在哪些地方呢。明天回家了,送一下分..


[解决办法]
在做内存池的时候会有用到
[解决办法]
就是在一个确定的位置构造一个对象。在管理内存等地方用。
[解决办法]
内存池,定位new 数组时楼主可要小心了。

[解决办法]
我了解的就是 内存池了。。。
[解决办法]
内存池
[解决办法]
stl中容器实现源码中用的挺多的~~~
[解决办法]
内存池
另外 可以覆盖/修改一个对象
C/C++ code
#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;}
[解决办法]
C/C++ code
m_name[size - 1] = '\0';
[解决办法]
重载全局的new操作符,然后在自定义new操作符函数中打印文件名和行号,就可以定位那些地方使用了new。
一般的内存泄漏检查工具都是这么实现的。

[解决办法]
C/C++ code
"二斗墨汁"
[解决办法]
new 不是函数 只是个操作符。 
个人一般用malloc 哈哈
[解决办法]
内存池

热点排行
Bad Request.