C++类成员变量默认值

最近遇到个BUG,是placement new中类成员变量默认值的问题,placement new是不会执行默认初始化的,只有new出来的会执行默认初始化。

数据类型默认值
基本数据类型整形0
基本数据类型浮点类0.0
基本数据类型字符型‘\u0000’
引用数据类型(指针,类,接口)null
#include <iostream>
using namespace std;
class A
{
public:
    int a;
    A() {}
};
int main()
{
    cout << "栈空间类成员变量开始" << endl;
    A a1;
    cout << a1.a << endl;
    A a2;
    cout << a2.a << endl;
    A a3;
    cout << a3.a << endl;
    A a4;
    cout << a4.a << endl;
    cout << "栈空间类成员变量结束" << endl;
	
    cout << "const栈空间类成员变量开始" << endl;
    const A ca1;
    cout << ca1.a << endl;
    const A ca2;
    cout << ca2.a << endl;
    const A ca3;
    cout << ca3.a << endl;
    const A ca4;
    cout << ca4.a << endl;
    cout << "const栈空间类成员变量结束" << endl;

    cout << "new堆空间类成员变量开始" << endl;
    A* pa1 = new A();
    cout << pa1->a << endl;
    A* pa2 = new A();
    cout << pa2->a << endl;
    A* pa3 = new A();
    cout << pa3->a << endl;
    A* pa4 = new A();
    cout << pa4->a << endl;
    cout << "new堆空间类成员变量结束" << endl;

    cout << "栈空间数组类成员变量开始" << endl;
    A arr[4];
    for (int i = 0; i < 4; ++i)
    {
        cout << arr[i].a << endl;
    }
    cout << "栈空间数组类成员变量结束" << endl;

    cout << "placement new栈空间数组类成员变量开始" << endl;
    A* pla1 = new (&arr[0]) A();
    cout << pla1->a << endl;
    A* pla2 = new (&arr[1]) A();
    cout << pla2->a << endl;
    A* pla3 = new (&arr[2]) A();
    cout << pla3->a << endl;
    A* pla4 = new (&arr[3]) A();
    cout << pla4->a << endl;
    cout << "placement new栈空间数组类成员变量结束" << endl;

    return 0;
}

结果如下:

栈空间类成员变量开始
0
72703
0
4200080
栈空间类成员变量结束
const栈空间类成员变量开始
0
1
0
4210120
const栈空间类成员变量结束
new堆空间类成员变量开始
0
0
0
0
new堆空间类成员变量结束
栈空间数组类成员变量开始
-1430795808
32765
1
0
栈空间数组类成员变量结束
placement new栈空间数组类成员变量开始
-1430795808
32765
1
0
placement new栈空间数组类成员变量结束
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值