我正在使用Boost库来利用智能指针: shared_ptr

我怀疑在单元测试中,我做错了作业。

我的实现有哪些弊端,特别是带有 //怀疑注释的指令?

我是否需要免费的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);
}

最佳答案

尽管这是一个奇怪的用例,但应该可以。

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

发生的情况是,通过调用Class2的ctor创建了a实例Class2,该tor使用Class1中共享指针中返回的getInstanceOfClass1。然后,将在表达式的结尾处自动删除嵌套的临时(共享指针),并在整个表达式的末尾删除用于初始化Class1a实例。

忠告?也许您打算写Class1 a = ...吗?在这种情况下,我建议您考虑
auto ap = Class2::getInstanceOfClass1();
int code = ap->useInputAndReturnCode(input);

避免创建Class1的副本。

关于c++ - 是否有必要释放shared_ptr?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19155472/

10-17 01:37