牛骨文教育服务平台(让学习变的简单)
博文笔记

C++释放类的静态指针成员

创建时间:2017-06-17 投稿人: 浏览次数:1201

  • 问题一个类中的静态指针成员如何释放
    • 方法一创建一个类的对象显式调用类的析构函数在析构函数将类的静态指针成员释放
    • 方法二使用new和delete创建类的对象delete时会自动调用类的析构函数
    • 方法三不创建类的对象


方法一:创建一个类的对象,显式调用类的析构函数,在析构函数将类的静态指针成员释放

#include <memory>
#include <iostream>
using namespace std;
class Base
{
public:
    Base() {
    }
    ~Base() {
        if(num != nullptr) {
            cout << "Release num" << endl;
            delete num;
        }
        num = nullptr;
    }
    static int* num;
private:
};
int* Base::num = nullptr;
void test() {
    Base::num = new int(1);
    Base b; // 创建一个临时对象,在函数结束后,临时对象会调用类的析构函数,在析构函数中将类的静态成员num释放
}
int main(int argc, char const *argv[])
{
    test();
    return 0;
}

方法二:使用new和delete创建类的对象,delete时会自动调用类的析构函数

#include <memory>
#include <iostream>
using namespace std;
class Base
{
public:
    Base() {
    }
    ~Base() {
        if(num != nullptr) {
            cout << "Release num" << endl;
            delete num;
        }
        num = nullptr;
    }
    static int* num;
private:
};
int* Base::num = nullptr;
int main(int argc, char const *argv[])
{
    Base::num = new int(1);
    auto p = new Base();
    delete p;
    return 0;
}

方法三:不创建类的对象

#include <memory>
#include <iostream>
using namespace std;
class Base
{
public:
    Base() {
    }
    ~Base() {
        if(num != nullptr) {
            cout << "Release num" << endl;
            delete num;
        }
        num = nullptr;
    }
    static int* num;
private:
};
int* Base::num = nullptr;
int main(int argc, char const *argv[])
{
    Base::num = new int(1);
    Base();    
    return 0;
}

CSDN 辣鸡 MD 编辑器,无序列表格式全丢

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。