File: cxx17_aligned_new.cpp

package info (click to toggle)
valgrind 1%3A3.24.0-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 176,332 kB
  • sloc: ansic: 795,029; exp: 26,134; xml: 23,472; asm: 14,393; cpp: 9,397; makefile: 7,464; sh: 6,122; perl: 5,446; python: 1,498; javascript: 981; awk: 166; csh: 1
file content (84 lines) | stat: -rw-r--r-- 2,171 bytes parent folder | download | duplicates (3)
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
73
74
75
76
77
78
79
80
81
82
83
84
// See
// https://en.cppreference.com/w/cpp/memory/new/operator_new
// and
// https://en.cppreference.com/w/cpp/memory/new/operator_delete

// Some of these are only used in very special circumstances
// so rather then using new and delete expressions most calls
// here directly call the operators

#include <cstdlib>
#include <new>
#include <iostream>

class alignas(64) MyClass {
public:
    int i;
};

class OrdinaryClass {
public:
    int i;
};

int main() {
    // THROWING
    // plain versions
    // cppreference new number 1
    OrdinaryClass* oClass = new OrdinaryClass();
    // cppreference delete number 1
    operator delete(oClass);

    // cppreference new number 2
    OrdinaryClass* oClass5 = new OrdinaryClass[5];
    // cppreference delete number 2
    operator delete[](oClass5);

    // aligned versions
    // cppreference new number 3
    MyClass* myClass = new MyClass();
    // cppreference delete number 3
    operator delete(myClass, std::align_val_t(64U));

    // cppreference new number 4
    MyClass* myClass5 = new MyClass[5];
    // cppreference delete number 4
    operator delete[](myClass5, std::align_val_t(64U));

    // sized versions
    oClass = new OrdinaryClass();
    // cppreference delete number 5
    operator delete(oClass, sizeof(OrdinaryClass));

    oClass5 = new OrdinaryClass[5];
    // cppreference delete number 6
    operator delete[](oClass5, sizeof(OrdinaryClass)*5);
    
    // sized aligned versions
    myClass = new MyClass();
    // cppreference delete number 7
    operator delete(myClass, sizeof(*myClass), std::align_val_t(64U));

    myClass5 = new MyClass[5];
    // cppreference delete number 8
    operator delete [](myClass5, sizeof(*myClass)*5, std::align_val_t(64U));

    // NOTHROW

    // cppreference new number 5
    oClass = new (std::nothrow) OrdinaryClass;
    delete oClass;

    // cppreference new number 6
    oClass5 = new (std::nothrow) OrdinaryClass[5];
    delete [] oClass5;

    // cppreference new number 7
    myClass = new (std::nothrow) MyClass;
    delete myClass;

    // cppreference new number 8
    myClass5 = new (std::nothrow) MyClass[5];
    delete [] myClass5;
}