C++:静态指针、静态对象和动态内存分配

kra*_*101 0 c++ pointers static-members dynamic-memory-allocation

考虑以下代码段:

#include <iostream>
using namespace std;

class p
{
    public:
    int* q;
    p()
    {
        q = new int(100);
    }
    ~p(){
        delete q;
    }
};

static p* p1 = new p();
static p p2;

int main() {
    // your code goes here
    std::cout << *(p1->q);
    std::cout << *(p2.q);

    delete p1;
}
Run Code Online (Sandbox Code Playgroud)

p1 和 p2 是静态变量,它们必须存储在静态段中。

  1. 由于 p1 是一个指针,那么是否只是存储在静态段中的指针地址,甚至是它指向的对象?

  2. p2 是一个普通的静态对象,但是它包含一个动态分配的成员变量 q,那么 q 是否也存储在静态段中?

Xia*_*Pei 5

  1. p1是一个指针,它存储在静态段中(我不确定这是不是正确的术语),p1指向的对象或内存在堆上。

  2. p2是一个对象,它存储在静态段中。q是内部的指针p2,指向的对象或内存q在堆上。