定位New
#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用的比较少,平常都用在哪些地方呢。明天回家了,送一下分..#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;}
[解决办法]
m_name[size - 1] = '\0';
[解决办法]
重载全局的new操作符,然后在自定义new操作符函数中打印文件名和行号,就可以定位那些地方使用了new。
一般的内存泄漏检查工具都是这么实现的。
[解决办法]
"二斗墨汁"
[解决办法]
new 不是函数 只是个操作符。
个人一般用malloc 哈哈
[解决办法]
内存池