C++中限制对象创建和销毁

 更新时间:2026年03月08日 15:27:44   作者:yy__xzz  
本文主要介绍了C++中限制对象创建和销毁,通过限制构造和析构函数的访问权限,并提供静态函数接口来控制类的实例化和销毁,从而实现对对象的精确控制和管理,感兴趣的可以了解一下

一、代码

class TestMem {
protected:  // 藏起来!
    TestMem() { }      // 构造函数
    ~TestMem() { }     // 析构函数

public:
    static TestMem* Create() { return new TestMem; }  // 唯一创建方式
    static void Drop(TestMem* p) { delete p; }        // 唯一销毁方式
};

二、为什么这么写?

普通类(谁都能动)

TestMem t;        // 栈上创建
TestMem* p = new TestMem;  // 堆上创建
delete p;         // 随便销毁

限制类(只能我允许)

// TestMem t;           ❌ 不行!
// TestMem* p = new TestMem; ❌ 不行!
// delete p;            ❌ 不行!

TestMem* p = TestMem::Create();  // ✅ 只能这样创建
TestMem::Drop(p);                  // ✅ 只能这样销毁

三、三句话讲明白

1.构造函数藏起来→ 不能直接new

protected: 
    TestMem() { }

2.析构函数藏起来→ 不能直接delete

protected:
    ~TestMem() { }

3.提供两个公共窗口→ 通过静态函数操作

static TestMem* Create() { return new TestMem; }  // 创建窗口
static void Drop(TestMem* p) { delete p; }        // 销毁窗口

四、为什么要这样?

原因说明
控制数量防止创建太多对象
控制时机确保创建/销毁时做必要检查
防止误操作避免忘记delete或多次delete

到此这篇关于C++中限制对象创建和销毁的文章就介绍到这了,更多相关C++ 限制对象创建销毁内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • C语言中关于sizeof 和 strlen的区别分析

    C语言中关于sizeof 和 strlen的区别分析

    本文通过示例简单分析了4种情况下C语言中sizeof 和 strlen的区别,算是个人经验的一个小小的总结,如有遗漏还请大家告知。
    2015-02-02
  • C语言全面梳理结构体知识点

    C语言全面梳理结构体知识点

    结构体是一些值的集合,这些值称为成员变量,结构体的每个成员可以是不同类型的变量。本文将通过示例为大家详细讲讲C语言中结构体的使用,需要的可以参考一下
    2022-07-07
  • C++11中列表初始化机制的概念与实例详解

    C++11中列表初始化机制的概念与实例详解

    在我们实际编程中,我们经常会碰到变量初始化的问题,对于不同的变量初始化的手段多种多样,下面这篇文章主要给大家介绍了关于C++11中列表初始化机制的相关资料,需要的朋友可以参考下
    2021-11-11
  • VS2017开发C语言出现“no_init_all“的解决办法

    VS2017开发C语言出现“no_init_all“的解决办法

    这篇文章介绍了VS2017开发C语言出现“no_init_all“的解决办法,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • C++实现快捷店会员管理系统

    C++实现快捷店会员管理系统

    这篇文章主要为大家详细介绍了C++实现快捷店会员管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C++条件及循环语句的综合运用实例

    C++条件及循环语句的综合运用实例

    这篇文章主要介绍了C++条件及循环语句的综合运用实例,能够帮助C++初学者更好地掌握C++的逻辑语句用法,需要的朋友可以参考下
    2015-09-09
  • C++ Boost Optional示例超详细讲解

    C++ Boost Optional示例超详细讲解

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
    2022-11-11
  • c++实现逐行读取配置文件写入内存的示例

    c++实现逐行读取配置文件写入内存的示例

    这篇文章主要介绍了c++实现逐行读取配置文件写入内存的示例,需要的朋友可以参考下
    2014-05-05
  • C语言实现时间处理工具的示例代码

    C语言实现时间处理工具的示例代码

    这篇文章主要为大家详细介绍了利用C语言实现时间处理工具的相关资料,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2022-09-09
  • QT中在QLabel显示图片并且利用鼠标点击画线问题

    QT中在QLabel显示图片并且利用鼠标点击画线问题

    这篇文章主要介绍了QT中在QLabel显示图片并且利用鼠标点击画线问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11

最新评论