考虑以下代码段:
#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 是静态变量,它们必须存储在静态段中。
既然p1是一个指针,那么静态段甚至是它所指向的对象中存储的只是指针地址吗?
p2是一个普通的静态对象,但它包含一个动态分配的成员变量q,那么q是否也存储在静态段中?
最佳答案
p1
是一个指针,它存储在静态段中(我不确定这是正确的术语),p1
指向的对象或内存是 on堆。p2
是一个对象,它存储在静态段中。q
是p2
中的指针,q
指向的对象或内存在堆上。
关于C++:静态指针、静态对象和动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33492546/