DLL与单例模式

whtuling2006 2009-12-09 01:00:19
template<typename T>
class Singleton
{
public:
static T& Instance()
{
static T theSingleInstance; //assumes T has a default constructor
return theSingleInstance;
}
};
这个是单例模式,我现在再DLL中有一个类是派生自它的,在dll和客户代码里面两次调用Instance得到的是不同的实例,一般的解决方案是什么?我知道一种是new一个对象,除此之外还有吗?
...全文
305 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2009-12-09
  • 打赏
  • 举报
回复
dll增加一个接口函数,返回这个dll中的实例对象的指针。
whtuling2006 2009-12-09
  • 打赏
  • 举报
回复
我知道是两个不同的,但是这样的情况就不行吗?我在单例模式所在的dll里面也需要调用Instance,在客户代码里面也想调用,现在主要是可以怎么解决这个问题。
何日人再来 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 taodm 的回复:]
汗,滥用单件模式的典范。
因为,dll和exe是2个不同的编译链接单元,当然会各有各的“单件实例”。
[/Quote]

正解!
taodm 2009-12-09
  • 打赏
  • 举报
回复
汗,滥用单件模式的典范。
因为,dll和exe是2个不同的编译链接单元,当然会各有各的“单件实例”。
WingForce 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 whtuling2006 的回复:]
在dll和客户代码里面两次调用Instance得到的是不同的实例
[/Quote]

2次调用是什么意思?既然是dll里的,应该由dll提供单一接口获得实例,客户代码应该一直从dll接口获得实例
whtuling2006 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 chenyu2202863 的回复:]
你的单件还派生~~
那你拿单件来干嘛呢?只是为了方便访问吧?
[/Quote]
我是在维基百科上面复制下来的,

template<typename T> class Singleton {

public:
static T& Instance()
{
static T theSingleInstance; //assumes T has a default constructor
return theSingleInstance;
}
};

class OnlyOne : public Singleton<OnlyOne> {

private:
OnlyOne(){}
OnlyOne(OnlyOne& rhs){}
friend class Singleton<OnlyOne>;

//..rest of interface defined here
};

确实是为了方便,不用派生就好了,呵呵,结贴。
macrojj 2009-12-09
  • 打赏
  • 举报
回复
如果这样 你只能把 静态的搞成 new 的
chenyu2202863 2009-12-09
  • 打赏
  • 举报
回复
你的单件还派生~~
那你拿单件来干嘛呢?只是为了方便访问吧?
whtuling2006 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liubuweiright 的回复:]
把构造函数设为private
[/Quote]
本来就是私有的,要不怎么叫单例模式呢,看来只能用动态分配来弄了。
liubuweiright 2009-12-09
  • 打赏
  • 举报
回复
把构造函数设为private

5,531

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧