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:
*/

【参考】

http://www.cplusplus.com/reference/new/operator%20new/

转载于:https://www.cnblogs.com/hellogiser/p/operator-new.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值