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