• 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 << "] ";
        }
    };

    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/

    个人学习笔记,欢迎拍砖!---by hellogiser

    Author: hellogiser
    Warning: 本文版权归作者和博客园共有,欢迎转载,但请保留此段声明,且在文章页面明显位置给出原文连接。Thanks!
    Me: 如果觉得本文对你有帮助的话,那么【推荐】给大家吧,希望今后能够为大家带来更好的技术文章!敬请【关注】
  • 相关阅读:
    狗狗急性肠胃炎
    shell change password
    男职工为什么要交生育保险
    预扣预缴个税
    转《最优状态机》
    状态机编程-队列缓冲事件,事件可异步触发
    max713镍氢电池充电管理IC
    NUP2201MR
    LSP5513
    74HC14D(6反向施密特触发器)
  • 原文地址:https://www.cnblogs.com/hellogiser/p/operator-new.html
Copyright © 2020-2023  润新知