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