设计方式.单例子类能不能不friend父类,不private构造函数
设计模式.单例子类能不能不friend父类,不private构造函数
template<class T>
class Base
{
public:
static T& instance(){static T instance;return instance;}
};
class Derived : public Base<Derived>
{
//begin
friend class Base;
private:
Derived(){}
//end
}
这里有没有办法能让父类再复杂一点,从而省掉子类的//begin 到//end之间的代码?请高手指教!
------解决方案--------------------
你的意图应该是这样吧:
------解决方案--------------------
不想new就也改成私有呗,public的构造函数显然就是可以new的啊
------解决方案--------------------
话说 直接定义一个 Base<Derived> 就可以了 已经就是单例的了
干嘛还要继承呢
------解决方案--------------------
这个一直就是这样写的 我也没注意过为什么这样写。。。
------解决方案--------------------
不希望一个对象被new只能私有它的构造函数,
但是其实私有构造并不是真的能阻止new一个这个对象 比如
所以 应该有限度的使用语法糖
------解决方案--------------------
你的这个场景
你完全可以将 AbcDataMgr的构造私有,ResourceFactory_map的构造一样私有,当然这样只能做到不可以直接被new出来,至于是否继承ResourceFactory_map看你自己需要
使用时类似:
------解决方案--------------------
其实用多了
同样的这个疑问,很多第三方库写单例也就是提供一个singleton<T>这样的类就完了。没有道理还需要继承一下。
template<class T>
class Base
{
public:
static T& instance(){static T instance;return instance;}
};
class Derived : public Base<Derived>
{
//begin
friend class Base;
private:
Derived(){}
//end
}
这里有没有办法能让父类再复杂一点,从而省掉子类的//begin 到//end之间的代码?请高手指教!
设计模式
单例
C++
friend
构造函数
------解决方案--------------------
你的意图应该是这样吧:
template<class T>
class Base
{
friend T;
private:
Base(){}
public:
static T& instance(){static T instance;return instance;}
};
class Derived : public Base<Derived>
{
public:
Derived(){}
};
------解决方案--------------------
不想new就也改成私有呗,public的构造函数显然就是可以new的啊
------解决方案--------------------
话说 直接定义一个 Base<Derived> 就可以了 已经就是单例的了
干嘛还要继承呢
------解决方案--------------------
这个一直就是这样写的 我也没注意过为什么这样写。。。
------解决方案--------------------
不希望一个对象被new只能私有它的构造函数,
但是其实私有构造并不是真的能阻止new一个这个对象 比如
class A
{
public:
void SetA(int a){m_a = a;}
private:
A(){}
int m_a;
};
A *p = (A *)malloc(sizeof(A));
p->SetA(10);
所以 应该有限度的使用语法糖
------解决方案--------------------
你的这个场景
你完全可以将 AbcDataMgr的构造私有,ResourceFactory_map的构造一样私有,当然这样只能做到不可以直接被new出来,至于是否继承ResourceFactory_map看你自己需要
使用时类似:
template<class T>
class ResourceFactory_map
{
private:
ResourceFactory_map(){}
public:
static T& instance(){static T instance;return instance;}
};
class XXXMgr
{
friend ResourceFactory_map<XXXMgr>;
private:
XXXMgr(){}
XXXMgr(XXXMgr& other){}
};
XXXMgr &a = ResourceFactory_map<XXXMgr>::instance();
------解决方案--------------------
其实用多了
同样的这个疑问,很多第三方库写单例也就是提供一个singleton<T>这样的类就完了。没有道理还需要继承一下。