C++中有三种常见的实例化方法

  1. 静态实例化:在程序的全局或静态作用域中定义并初始化一个对象,该对象在程序整个生命周期内只存在一个实例。
  2. 堆实例化:使用 new 运算符在动态存储区域中分配内存并实例化一个对象。这样创建的对象在程序运行期间一直存在,直到使用 delete 运算符显式释放其内存。
  3. 栈实例化:在函数或代码块的作用域中定义并实例化一个对象,该对象的生命周期与所在的函数或代码块相同。对象在离开该作用域时自动销毁。 静态实例化的例子
class MyClass {
public:
    MyClass() : m_x(0) {}
    void setX(int x) { m_x = x; }
    int getX() const { return m_x; }
private:
    int m_x;
};

MyClass globalObject;  // 全局实例

int main() {
    static MyClass staticObject;  // 静态实例
    globalObject.setX(5);
    staticObject.setX(10);
    int globalX = globalObject.getX(); // globalX = 5
    int staticX = staticObject.getX(); // staticX = 10
    // ...
    return 0;
}

上面的例子中,通过调用 setX 和 getX 来对全局对象 globalObject 和静态对象 staticObject 的成员变量进行访问。


堆实例化的例子

class MyClass {
public:
    MyClass() : m_x(0) {}
    void setX(int x) { m_x = x; }
    int getX() const { return m_x; }
private:
    int m_x;
};

int main() {
    MyClass* heapObject = new MyClass;  // 堆实例
    heapObject->setX(5);
    int heapX = heapObject->getX(); // heapX = 5
    // ...
    delete heapObject;
    return 0;
}

上面的例子中,通过调用 setX 和 getX 来对堆对象 heapObject 的成员变量进行访问。


栈实例化的例子

class MyClass {
public:
    MyClass() : m_x(0) {}
    void setX(int x) { m_x = x; }
    int getX() const { return m_x; }
private:
    int m_x;
};

void someFunction() {
    MyClass stackObject;  // 栈实例
    stackObject.setX(5);
    int stackX = stackObject.getX(); // stackX = 5
    // ...
}

int main() {
    someFunction();
    return 0;
}

上面的例子中,通过调用 setX 和 getX 来对栈对象 stackObject 的成员变量进行访问。

经验分享 程序员 微信小程序 职场和发展