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

标签 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;
}

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

  1. 既然p1是一个指针,那么静态段甚至是它所指向的对象中存储的只是指针地址吗?

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

最佳答案

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

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

关于C++:静态指针、静态对象和动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33492546/

相关文章:

c++ - 访问 void 函数中的变量以用于其他函数? C++

c - 指针算术 :++*ptr or *ptr++?

c++ - 将 char 数组传递给 C++ 中的函数时的不同行为

ada - 成员值的静态引用 - Ada

c++ - 我如何在 std::vector<short> 中 push_back ShortBuffer 数据?

c++ - 指针对象的指针和内存分配

c++ - QML/C++ 编译错误

c - 如何为字符指针赋予字符串值?

c++ - 静态变量初始化测验

C++ 在模板中使用静态常量类成员