gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:13:56 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com