• 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: 如果觉得本文对你有帮助的话,那么【推荐】给大家吧,希望今后能够为大家带来更好的技术文章!敬请【关注】
  • 相关阅读:
    pandas读写csv最简代码
    csv.read和csv.write
    交叉验证
    纪念被win10大更新搞崩的vbox
    c++中关于保留小数的小总结
    Java里的值传递与“引用传递”——一些想法
    Eclipse使用遇到的一些问题及解决方案(持续更新)
    Pray for 京阿尼——愿逝者安息,伤者早日康复
    洛谷p1208—混合牛奶【典型贪心】(关联排序小技巧)
    洛谷p1217—回文质数(默默宣传打表法)
  • 原文地址:https://www.cnblogs.com/hellogiser/p/operator-new.html
Copyright © 2020-2023  润新知