C++ 分配给cpp中定义的全局静态变量的内存是否在C+中删除其类的实例后释放+;?

C++ 分配给cpp中定义的全局静态变量的内存是否在C+中删除其类的实例后释放+;?,c++,class,memory-leaks,static,global-variables,C++,Class,Memory Leaks,Static,Global Variables,我有一个类,其方法在example.cpp文件中定义,类在example.h中定义。example.cpp文件中定义了一个静态全局指针。(我需要将该指针定义为.cpp中的静态全局指针,因为它在裸机系统上运行的静态中断服务例程中被调用。)我想知道当删除该类的实例时,是否分配给该静态全局指针的内存在类外定义(在cpp文件内作为静态全局变量),也释放出来了?我担心内存泄漏问题。(请不要建议使用智能指针,谢谢) //example.cpp #包括 静态示例*ptr; 示例::示例(){prt=this;

我有一个类,其方法在example.cpp文件中定义,类在example.h中定义。example.cpp文件中定义了一个静态全局指针。(我需要将该指针定义为.cpp中的静态全局指针,因为它在裸机系统上运行的静态中断服务例程中被调用。)我想知道当删除该类的实例时,是否分配给该静态全局指针的内存在类外定义(在cpp文件内作为静态全局变量),也释放出来了?我担心内存泄漏问题。(请不要建议使用智能指针,谢谢)

//example.cpp
#包括
静态示例*ptr;
示例::示例(){prt=this;}
示例::~example(){}
//例h
课例
{
公众:
示例();
虚拟~example();
INTA;
};
//main.c
真空总管(真空)
{
而(1){
示例eg1;
删除&eg1;
}
//是否已释放分配给eg1的所有内存,包括全局静态变量(指针)?
}
我知道一旦对象被删除,对象内部的(int a)肯定会被释放,但是分配给全局静态指针本身(静态示例*ptr)的内存也会被释放吗(我假设)如果静态全局变量不是由类的所有实例共享的,那么它是否实际为该静态全局变量分配内存,但在删除该实例后不释放它?它会导致内存泄漏吗?


这是我第一次在这里提问。如果有任何不清楚的地方,请提前向您道歉。

任何声明为
静态的
都将在程序的整个生命周期内存在。它在第一次可能的使用之前构建,并在程序终止期间(即,在调用
main
返回或
exit
之后)在未完全指定的时刻销毁


此外,销毁(非智能)指针永远不会销毁指针指向的对象。如果要释放指针指向的资源,必须显式调用指针上的
delete
。(或者使用智能指针。这样做。它们更好。)

任何声明为
静态的
都会贯穿程序的生命周期。它在第一次可能的使用之前构建,并在程序终止期间(即,在调用
main
返回或
exit
之后)在未完全指定的时刻销毁


此外,销毁(非智能)指针永远不会销毁指针指向的对象。如果要释放指针指向的资源,必须显式调用指针上的
delete
。(或者使用智能指针。这样做。它们更好。)

任何声明为
静态的
都会贯穿程序的生命周期。它在第一次可能的使用之前构建,并在程序终止期间(即,在调用
main
返回或
exit
之后)在未完全指定的时刻销毁


此外,销毁(非智能)指针永远不会销毁指针指向的对象。如果要释放指针指向的资源,必须显式调用指针上的
delete
。(或者使用智能指针。这样做。它们更好。)

任何声明为
静态的
都会贯穿程序的生命周期。它在第一次可能的使用之前构建,并在程序终止期间(即,在调用
main
返回或
exit
之后)在未完全指定的时刻销毁


此外,销毁(非智能)指针永远不会销毁指针指向的对象。如果要释放指针指向的资源,必须显式调用指针上的
delete
。(或者使用智能指针。这样做更好。)

通常,静态全局变量不是成员变量,因此当分配或删除类时,对静态全局变量没有影响,除非类成员显式为静态全局变量分配或取消分配内存

在您的示例中,您只是将指针分配给全局变量,而不是分配新内存。因此,您不需要显式地释放它


此外,您不需要在main()中调用delete,因为eg1是一个局部变量。当main返回时,将自动调用eg1的析构函数。

通常,静态全局变量不是成员变量,因此当分配或删除类时,对静态全局变量没有影响,除非类成员显式地为静态全局变量分配或取消分配内存

在您的示例中,您只是将指针分配给全局变量,而不是分配新内存。因此,您不需要显式地释放它


此外,您不需要在main()中调用delete,因为eg1是一个局部变量。当main返回时,将自动调用eg1的析构函数。

通常,静态全局变量不是成员变量,因此当分配或删除类时,对静态全局变量没有影响,除非类成员显式地为静态全局变量分配或取消分配内存

在您的示例中,您只是将指针分配给全局变量,而不是分配新内存。因此,您不需要显式地释放它


此外,您不需要在main()中调用delete,因为eg1是一个局部变量。当main返回时,将自动调用eg1的析构函数。

通常,静态全局变量不是成员变量,因此当分配或删除类时,对静态全局变量没有影响,除非类成员显式地为静态全局变量分配或取消分配内存

在您的示例中,您只是将指针分配给全局变量,而不是分配新内存。因此,你必须
// example.cpp
#include <example.h>
static example* ptr;
example::example(){ prt = this; }
example::~example(){}

// example.h
class example
{
public:
example();
virtual ~example();
int a;
};

//main.c
void main(void)
{
  while(1){
           example eg1;
           delete &eg1;
           }
  //Has all the memory allocated to eg1 been freed up including the global static variable(a pointer)?
}
malloc: *** error for object 0x7fff560a8830: pointer being freed was not allocated