C++ 在栈上使用 new

#include <iostream>
#include <cstdint>
using namespace std;

struct i64
{
    i64()  { cout << "i64 构造函数" << endl; }
    ~i64() 
    { 
        cout << "i64 析构函数" << endl;
        first = 0;
        second = 0;
    }
    uint32_t first = 0;
    uint32_t second = 0;
};

int main()
{
    uint32_t area[10] = {};
    i64* cur = new(area) i64;
    cur->first = 1111;
    cur->second = 2222;
    cout << "area[0]:" << area[0] << endl;
    cout << "area[1]:" << area[1] << endl;

    cout << "====================================" << endl;

    area[0] = 2222;
    area[1] = 1111;
    cout << "(*cur).first :" << (*cur).first << endl;
    cout << "(*cur).second:" << (*cur).second << endl;

    // placement new 不需要 delete,内存管理由placement负责,但是需要显式调用析构函数
    cur->~i64();
    cur = nullptr;

    cout << "area[0]:" << area[0] << endl;
    cout << "area[1]:" << area[1] << endl;

    // area属于局部变量,分配在栈上,会自动释放
    return 0;
}

输出为

i64 构造函数
area[0]:1111
area[1]:2222
====================================
(*cur).first :2222
(*cur).second:1111
i64 析构函数
area[0]:0
area[1]:0
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容