1

我想使用模拟对象来测试使用 shared_ptr 指针的类。

它喜欢 ,

struct MyInterface {
    // public functions
};

class MyClass {
public:
    MyClass (shared_ptr<MyInterface> handle) : m_handle(handle) {}
    ~MyClass() {}
   // ...
private :
   shared_ptr<MyInterface> m_handle;
}

当我测试 MyClass 时,我将一个模拟对象传递给它。

struct NullDeleter {template<typename T> void operator()(T*) {} };

TMockObject<MyInterface> * mock = new TMockObject<MyInterface>();
shared_ptr<MyInterface> handle((MyInterface*)(*mock), NullDeleter());

MyClass myClass(handle);
delete mock;

问题是我在创建共享指针时必须使用 NullDeleter,否则,mock 将作为 MyInterface 被删除,这会导致错误。

有没有更好的设计呢?

谢谢~

4

2 回答 2

0

virtual析构函数添加到MyInterface,然后当您删除 (abstract)MyInterface时,也会调用所有子类析构函数。

struct MyInterface {
    virtual ~MyInterface() { }
    // public functions
};
于 2012-05-27T11:05:33.303 回答
0

如果我能理解你想要做什么并且我不犯错误,我更喜欢在 myClass 类中使用方法来检查参数的正确值。这意味着,您应该在将参数传递给类构造函数之后,提供另一种方法来检查该值。

于 2012-05-25T21:21:42.803 回答