【发布时间】:2020-07-15 07:11:54
【问题描述】:
我正在研究一类ex1,它需要一个静态成员变量y。该静态成员变量是指向ex2 类对象的指针,该类对象具有自己的构造函数和析构函数。现在我知道如何通过在类外部定义变量y 来初始化它。但是如何调用变量y的析构函数呢?我需要使用delete 语句,但是该语句的放置位置。我需要调用ex2类的构造函数和析构函数。
我的问题的等效代码如下所示:
#include<iostream>
class ex2 {
public:
int n;
ex2(int num) {
n = num;
std::cout << "Constructor of ex2\n";
}
~ex2(){std::cout << "Destructor of ex2\n";}
};
class ex1 {
public:
static ex2 *y; //static member variable
ex1() {std::cout << "Constructor of ex1\n";}
~ex1() {std::cout << "Destructor of ex1\n";}
};
ex2 *ex1::y = new ex2(90); //definition for static member
int main()
{
ex1 y1;
return 0;
}
这个的输出是:
Constructor of ex2
Constructor of ex1
Destructor of ex1
请帮助了解如何调用ex2 的析构函数。此外,需要在类ex1 的所有实例被销毁后调用析构函数。
【问题讨论】:
-
为什么不使用
static std::unique_ptr<ex2> y;。 -
由于内存是在静态范围内分配的,应该在程序退出时将其删除,另请参见atexit 函数。或者只是按照@DavidSchwartz 的建议使用智能指针。
标签: c++ pointers static destructor explicit-destructor-call