求解: 在这几种情况下, 析构函数被调用和不被调用的原因.

HoNooD HoNooD 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

#include <iostream>
using namespace std;

// --------------------------
// 1. 返回指针的单例实现
// --------------------------
class SingletonA
{
public:
static SingletonA* GetInstance();
// private:
~SingletonA(); // 有人把这个析构函数定义为private, 不知为什么?
private:
SingletonA();
static SingletonA* m_pInstance;
};

SingletonA::SingletonA()
{
cout << "SingletonA: Constructor.\r\n";
}

SingletonA::~SingletonA()
{
cout << "SingletonA: Destructor.\r\n";
delete m_pInstance;
}

SingletonA* SingletonA::m_pInstance = NULL;

SingletonA* SingletonA::GetInstance()
{
if (!m_pInstance)
{
m_pInstance = new SingletonA;
}
return m_pInstance;
}

// --------------------------
// 2. 返回引用的单例实现
// --------------------------
class SingletonB
{
public:
static SingletonB& GetInstance();
private:
SingletonB();
SingletonB(const SingletonB&);
SingletonB& operator=(const SingletonB&);
~SingletonB(); // 不知道为什么要把这个析构函数定义为private?
};

SingletonB::SingletonB()
{
cout << "SingletonB: Constructor.\r\n";
}

SingletonB::~SingletonB()
{
cout << "SingletonB: Destructor.\r\n";
}

SingletonB& SingletonB::GetInstance()
{
static SingletonB theSingleton;
return theSingleton;
}

// --------------------------
// 3. 随意定义了一个普通类
// --------------------------
class Foo
{
public:
Foo()
{
cout << "Foo: Constructor.\r\n";
}
// private:
~Foo() // 这个析构函数如果是private, 下面测试编译叫报错.
{
cout << "Foo: Destructor.\r\n";
}
};

// --------------------------
// 4. 测试
// --------------------------
int main()
{
SingletonA* instA = SingletonA::GetInstance();
SingletonB& instB = SingletonB::GetInstance();
Foo foo;

return 0;
}

// --------------------------
// 5. 控制台输出
// --------------------------
// SingletonA: Constructor.
// SingletonB: Constructor.
// Foo: Constructor.
// Foo: Destructor.
// SingletonB: Destructor.

// --------------------------
// 6. 我的问题
// --------------------------
// (1) 无论SingletonA的析构函数定义成private还是public, 为什么在上面的测试中都不会被调用?
// (2) 无论SingletonB的析构函数定义成private还是public, 为什么在上面的测试中都会被调用?
// (3) 写的Foo类是想测试通常情况下, 如果析构函数定义成private, 编译就不通过(提示无法调用私有
// 方法), 的确是那样. 那上面SingletonB的(析构函数)即使是private, 为什么也能别调用呢?
...全文

相关推荐

C++实现八数码难题求解器

八数码难题,又称滑动拼图问题,是人工智能领域中一个经典的搜索问题,常作为算法优化和实现的示例。它要求在一个3x3的框架内,通过上下左右滑动数字板,从给定的初始状态达到目标状态。虽然问题规模较小,但其解决方案通常涉及对搜索树的构建、状态评估和剪枝优化等复杂算法的实现,是学习算法设计与分析的优良素材。下面章节会逐一展开介绍八数码问题的各个解决环节,从C++语言的基础特性应用开始,逐步深入到动态数组、广度优先搜索(BFS)算法、递归调用方法的实现,最终构建出一个功能完整的八数码求解器。

叶宇霖

技术转移机构如何基于数据提升项目撮合精准度?.docx

技术转移机构如何基于数据提升项目撮合精准度?

BIZKEEN

超扭滑模与快速终端滑模的永磁同步电机无感控制:理论、离散化实现与仿真研究(Simulink仿真实现)

内容概要:本文系统研究了超扭滑模控制(STSMC)与快速终端滑模控制(FTSMC)在永磁同步电机(PMSM)无感控制中的应用,重点涵盖其理论基础、离散化实现方法及Simulink仿真验证。文章深入阐述了两种高阶滑模控制策略的设计原理,利用磁链无感观测技术实现转子位置与速度的精确估计,从而省去物理传感器,有效提升了系统的可靠性与鲁棒性。同时,提供了完整的Simulink仿真模型构建方案,包括控制器设计、关键参数整定及动态响应性能分析,充分验证了所提出的方法在零速与低速工况下的卓越控制性能和有效性。; 适合人群:具备电机控制、现代控制理论基础知识及熟练掌握MATLAB/Simulink仿真技能的研究生、科研人员与工程技术人员。; 使用场景及目标:①深入理解高阶滑模控制在电机驱动系统中的设计思想与具体实现;②掌握基于滑模观测器的无感控制核心技术;③开展永磁同步电机高性能控制算法的理论研究、仿真验证与工程化探索。; 阅读建议:建议将文中详尽的理论推导与Simulink仿真模型相结合进行学习,重点关注滑模面的构建、抖振抑制策略的实施以及离散化处理的细节,有条件的研究者可进一步将算法移植到DSP等硬件平台进行实验验证,以深化对理论的理解并检验其实际应用效果。

长安程序猿

多源动态最优潮流的分布鲁棒优化方法(IEEE118节点)(Matlab代码实现)

内容概要:本文系统阐述了基于Matlab的多源动态最优潮流分布鲁棒优化方法,聚焦于IEEE118节点电力系统,旨在应对高比例可再生能源接入背景下源荷双重不确定性所带来的调度挑战。该方法深度融合分布鲁棒优化理论,通过构建能够抵御最坏情况概率分布的决策模型,有效提升了电力系统在复杂不确定性环境下的运行安全性、经济性与可靠性。研究不仅提供了完整的Matlab代码实现,便于结果复现与算法验证,还特别关注了含风电等新能源的现代电网低碳调度问题,为解决实际工程中的优化调度难题提供了强有力的理论支撑和技术工具。; 适合人群:具备电力系统分析基础和Matlab编程能力的研究生、科研人员及从事智能电网优化运行、能源系统规划等相关领域的工程技术人员。; 使用场景及目标:①研究含高比例可再生能源接入的电力系统动态最优潮流问题;②掌握分布鲁棒优化在电力系统经济调度、低碳调度中的建模思想与求解方法;③利用IEEE118标准测试系统进行算法有效性验证与性能对比分析;④基于所提供的Matlab代码进行二次开发,探索新型不确定性优化理论在电力系统中的创新应用。; 阅读建议:建议读者结合电力系统最优潮流、不确定性优化理论(特别是分布鲁棒优化)的背景知识进行学习,重点关注模型的构建逻辑、目标函数与约束条件的设计原理,以及Matlab代码的具体实现细节。在学习过程中,应动手调试代码,尝试修改系统参数(如新能源出力波动范围、负荷水平等),以观察不同场景下优化结果的变化,从而深刻理解该方法的适应性、优势及其潜在的局限性。

天天程序猿

车间调度基于GA、PSO、SA、ACO、TS优化算法的车间调度比较研究(Matlab代码实现)

内容概要:本文系统性地比较了遗传算法(GA)、粒子群优化(PSO)、模拟退火(SA)、蚁群优化(ACO)和禁忌搜索(TS)五种智能优化算法在车间调度问题中的性能表现,并提供了基于Matlab的完整代码实现。研究聚焦于调度优化的核心目标——最小化完工时间(makespan),通过标准测试案例对各算法的收敛速度、求解精度和稳定性进行了深入对比分析,旨在为实际生产调度中算法的选择与改进提供科学依据。文中不仅详述了每种算法的设计思路与关键参数设置,还展示了其实现逻辑,便于读者理解、复现与拓展。; 适合人群:从事智能制造、工业工程、运筹优化等相关领域的研究人员,以及具备Matlab编程基础、希望将智能优化算法应用于实际调度问题的研究生和工程师。; 使用场景及目标:① 掌握主流智能优化算法在解决NP-hard车间调度问题上的具体应用与差异;② 学习如何利用Matlab实现并对比不同优化算法的性能;③ 为解决生产制造、物流配送等领域中的资源调度难题提供算法选型和技术参考。; 阅读建议:建议读者在阅读时重点关注各算法的Matlab实现代码和实验结果对比部分,动手运行代码以直观感受不同算法的寻优过程和效果差异。同时,可结合具体调度约束条件,尝试调整算法参数或融合多种算法思想,以深化对优化机理的理解。

天天程序猿
评论 3
收藏 已收藏
分享
返回顶部
HoNooD
C++ 语言 65,214 成员 250,514 内容