operator new3种情况详解
【本文链接】
http://www.cnblogs.com/hellogiser/p/operator-new.html
【代码】
C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
/*
version: 1.0 author: hellogiser blog: http://www.cnblogs.com/hellogiser date: 2014/9/20 */ #include "stdafx.h" #include "iostream" #include <new> // for operator new using namespace std; /* throwing (1) void* operator new (std::size_t size); nothrow (2) void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) noexcept; placement (3) void* operator new (std::size_t size, void* ptr) noexcept; */ struct MyClass { int data[100]; MyClass() { std::cout << "constructed [" << this << "]\n"; } }; void test_new_3 () { std::cout << "1: "; MyClass *p1 = new MyClass; // allocates memory by calling: operator new (sizeof(MyClass)) // and then constructs an object at the newly allocated space std::cout << "2: "; MyClass *p2 = new (std::nothrow) MyClass; // allocates memory by calling: operator new (sizeof(MyClass),std::nothrow) // and then constructs an object at the newly allocated space std::cout << "3: "; new (p2) MyClass; // does not allocate memory -- calls: operator new (sizeof(MyClass),p2) // but constructs an object at p2 // Notice though that calling this function directly does not construct an object: std::cout << "4: "; MyClass *p3 = (MyClass *) ::operator new (sizeof(MyClass)); // allocates memory by calling: operator new (sizeof(MyClass)) // but does not call MyClass's constructor delete p1; delete p2; delete p3; } int main() { test_new_3(); return 0; } /* 1: constructed [0031E690] 2: constructed [0031E958] 3: constructed [0031E958] 4: */ |
【参考】