c++ - 是否有必要释放 shared_ptr?

标签 c++ unit-testing boost shared-ptr smart-pointers

我正在使用 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); 
}

最佳答案

虽然这是一个奇怪的用例,但应该没问题。

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

Class2 实例 a 是通过调用 Class2 的构造函数创建的,它采用 Class1getInstanceOfClass1 的共享指针中返回。嵌套的临时变量(共享指针)将在表达式末尾自动删除,删除用于初始化aClass1实例整个表达式的结尾。

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

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

避免创建 Class1 的拷贝。

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

相关文章:

c++ - C++ 中的单元测试如何在 printf 刚刚显示的源代码中访问我的结果

c++ - 使用 boost-spirit 的函数解析器

如果引入 try-catch,则 C++ 段错误

c++ - WriteFile 到并行端口挂起

C++ if 语句

c++ - 带加速度的卡尔曼滤波器

java - 如何在一个测试类中测试单例?

java - 在 Junit Test 中覆盖默认 Spring-Boot application.properties 设置

asp.net-mvc - 在不访问数据库的情况下测试 ASP.NET MVC Controller 的干净方法?

c++ - 方形列表 "Compare Constructor"实现