在 C++ 中创建单例实例 class
Create instance of singleton class in C++
我有一个单例 class foo:
class foo
{
static foo* pointer;
foo();
public:
static foo* instance();
static void destroy();
}
foo::foo()
{
}
foo* foo::instance()
{
if (pointer == 0)
pointer = new foo();
return pointer;
}
void foo::destroy()
{
delete pointer;
pointer = 0;
}
我正在尝试对此 class 进行单元测试(class 还有其他方法,这里没有必要展示)。
我创建了一个 MockClassfoo 并将 class 'foo' 继承到 MockClassfoo.
我创建了一个伪造的 MockClassfoo 实例,如我的测试所示 class:
class Test
{
auto aFake =(MockClassfoo *)MockClassfoo ::instance();
fooAccessor::set(aFake);
}
但是在我的 class fooAccessor 中,我想获取 foo 的实例..删除指针并在其中分配我的模拟实例,这是不可能的:
class fooAccessor
{
public:
static void set(foo * other)
{
foo::instance();
delete foo::pointer; //here i get error saying pointer is inaccessible
foo::pointer = other; //here i get error saying pointer is inaccessible
}
};
我不想对 class'foo' 中指针的可访问性进行任何更改。我只想获取实例,将其删除并将我的模拟实例分配给它。因为它说它无法访问,所以关于如何做到这一点有什么建议吗?
您需要在 class foo
中交 fooAccessor
朋友 class。通过这样做,foo
授予 fooAccessor
访问其私有成员的权限。
如果 MockClassfoo 如果继承自 foo,则使 foo 不是最终的:
- 创建构造函数和static foo指针;* protected
- 在你的 Mock class 中定义一个 getInstance 分配一个 MockClassFoo 而不是 foo 一个
它应该可以解决问题。
关于您的代码的一些提示:
- C++ 中的一个 ponter,应该使用 nullptr(或古老的 NULL)初始化,并与 nullptr(或 NULL)进行比较。不是 0.
- 我更喜欢在 class
的开头添加明确的 private: 关键字
- 我不喜欢“销毁”方法的想法。改用析构函数
我有一个单例 class foo:
class foo
{
static foo* pointer;
foo();
public:
static foo* instance();
static void destroy();
}
foo::foo()
{
}
foo* foo::instance()
{
if (pointer == 0)
pointer = new foo();
return pointer;
}
void foo::destroy()
{
delete pointer;
pointer = 0;
}
我正在尝试对此 class 进行单元测试(class 还有其他方法,这里没有必要展示)。 我创建了一个 MockClassfoo 并将 class 'foo' 继承到 MockClassfoo.
我创建了一个伪造的 MockClassfoo 实例,如我的测试所示 class:
class Test
{
auto aFake =(MockClassfoo *)MockClassfoo ::instance();
fooAccessor::set(aFake);
}
但是在我的 class fooAccessor 中,我想获取 foo 的实例..删除指针并在其中分配我的模拟实例,这是不可能的:
class fooAccessor
{
public:
static void set(foo * other)
{
foo::instance();
delete foo::pointer; //here i get error saying pointer is inaccessible
foo::pointer = other; //here i get error saying pointer is inaccessible
}
};
我不想对 class'foo' 中指针的可访问性进行任何更改。我只想获取实例,将其删除并将我的模拟实例分配给它。因为它说它无法访问,所以关于如何做到这一点有什么建议吗?
您需要在 class foo
中交 fooAccessor
朋友 class。通过这样做,foo
授予 fooAccessor
访问其私有成员的权限。
如果 MockClassfoo 如果继承自 foo,则使 foo 不是最终的:
- 创建构造函数和static foo指针;* protected
- 在你的 Mock class 中定义一个 getInstance 分配一个 MockClassFoo 而不是 foo 一个
它应该可以解决问题。
关于您的代码的一些提示:
- C++ 中的一个 ponter,应该使用 nullptr(或古老的 NULL)初始化,并与 nullptr(或 NULL)进行比较。不是 0.
- 我更喜欢在 class 的开头添加明确的 private: 关键字
- 我不喜欢“销毁”方法的想法。改用析构函数