// 动态创建对象(malloc / realloc / calloc 在堆中创建空间, new 关键字)
#include <iostream>
#include <cstdlib>

using namespace std;

class A
{
private:
    int x;

public:
    A(int x)
    {
        this->x = x;
        cout << "A(int)" << endl;
    }
    ~A()
    {
        cout << "~A()" << endl;
    }

public:
    void init(int x)
    {
        this->x = x;
        cout << "init(int)" << endl;
    }
    void clean()
    {
        cout << "clean()" << endl;
    }
};

int main()
{
    // 1) 使用 malloc 方式创建
    // cout << "A size is " << sizeof(A) << endl;
    // A *a1 = (A *)malloc(sizeof(A));
    // // a1->A(20); // 不允许显式调用构造函数
    // a1->init(20); // 初始化数据
    // a1->clean();  // 释放数据的空间
    // a1->~A();     // 析构函数可以显式调用
    // free(a1);

    // 2) new 方式创建，delete释放
    A *a1 = new A(1);
    delete a1; // 用完之后直接 delete 释放空间

    return 0;
}
