是否允许并接受用删除标记静态方法

Is it allowed and accepted to mark a static method with delete?

本文关键字:删除 静态方法 是否      更新时间:2023-10-16

为所有业务对象假设接口旨在隐藏实现。不使用PIMPL模式。

class CNetworkManager : public IMyNetwork {...};

所有这些经理都是单身人士,具有以下方法:

NetworkManager.h

CNetworkManager* CNetworkManager::getInstance();
CNetworkManager* CNetworkManager::destroy();

但是networkmanager.h并未导出。因此,在

中使用静态方法

NetworkManagerFactory.h

class CMyNetworkFactory
{
    public:
        static IMyNetwork* getInstance();
        static void destroy();
};

NetworkManagerFactory.cpp

IMyNetwork* CMyNetworkFactory::getInstance()
{
    return CNetworkManager::getInstance();
}

但是所有工厂都应使用相同的命名。因此我添加了

模板isingletonFactory.h

template <class Factory, class Interface>
class CSingletonFactory
{
    public:
        ~CSingletonFactory() {}
        static Interface* getInstance() = delete;
        static void destroy() = delete;
};

和重新设计的NetworkManagerFactory.h到CRTP

class CMyNetworkFactory : public CSingletonFactory<CMyNetworkFactory, IMyNetwork>
{
    public:
        static IMyNetwork* getInstance();
        static void destroy();
};

问题:使用 static delete 一起使用吗?

使用静态和删除不良的用法还是常见的艺术?

= delete;是一个函数定义,严格地说。因此,任何函数都可以定义为已删除。该功能是成员或免费的,无论是否静态,与已删除的定义完全正交。

删除的结果是指指删除函数的程序变得不明显。转介由过载分辨率确定。

是的,如果我们想禁止某些内容,则删除定义是普遍的做法。您似乎希望防止在没有getInstance的情况下定义诸如CMyNetworkFactory之类的内容。但是,然后我承认,不知道为什么您需要定义任何通过CRTP删除的内容。毕竟,名称查找未能完全找到getInstance与已删除的定义一样好。