1

我正在使用 Boost 库从智能指针中受益:shared_ptr

我怀疑在我的单元测试中,我的作业很糟糕。

我的实现有什么缺点,特别是有// suspected注释的指令?

我是否需要释放 shared_ptr指针(我猜不可能按照我在单元测试中分配的方式去做)?

有什么建议吗?非常感谢!

在 Class2 声明中:

static boost::shared_ptr<Class1> getInstanceOfClass1();

在 Class2 定义中:

boost::shared_ptr<Class1> Class2::getInstanceOfClass1()
{
    boost::shared_ptr<Class1> inst1 = boost::make_shared<Class1>();

    //.... some instructions on inst1

    return inst1 ;
}

在使用 Boost.Test 的单元测试中:

BOOST_AUTO_TEST_CASE( test_some_label_here )
{
    string input;
    //instructions...
    // mocking the input
    //...

    Class1 a = *(Class2::getInstanceOfClass1()); //suspected
    int code = a.useInputAndReturnCode(input);

    // having CODE_X as a macro
    BOOST_CHECK_EQUAL(code, CODE_X); 
}
4

2 回答 2

1

应该没问题,尽管这是一个奇怪的用例。

Class2 a = *(Class2::getInstanceOfClass1()); //suspected

发生的情况是通过调用一个 ctor 创建一个Class2实例,该ctor从. 然后嵌套的临时(共享指针)将在表达式末尾自动删除,删除用于在整个表达式末尾初始化的实例。aClass2Class1getInstanceOfClass1Class1a

建议?也许你打算写Class1 a = ...?在这种情况下,我建议你考虑

auto ap = Class2::getInstanceOfClass1();
int code = ap->useInputAndReturnCode(input);

以避免创建Class1.

于 2013-10-03T09:28:46.310 回答
1

您不必释放 shared_ptr,因为当没有 shared_ptr 指向它时,指向的对象会自动销毁。另一方面,你必须确保不要在同一个对象上混合 shared_ptr 和常规指针:如果对象被 boost 销毁,因为没有 shared_ptr 指向它,由于常规指针,你会在尝试访问它时出错.

于 2013-10-03T09:43:44.263 回答