我正在使用 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
的构造函数创建的,它采用 Class1
在 getInstanceOfClass1
的共享指针中返回。嵌套的临时变量(共享指针)将在表达式末尾自动删除,删除用于初始化a
的Class1
实例整个表达式的结尾。
建议?也许您打算编写 Class1 a = ...
?在那种情况下我建议你考虑
auto ap = Class2::getInstanceOfClass1();
int code = ap->useInputAndReturnCode(input);
避免创建 Class1
的拷贝。
关于c++ - 是否有必要释放 shared_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19155472/