我正在使用Boost库从智能指针中受益: shared_ptr 。
我怀疑在我的单元测试中,我的任务很糟糕。
我的实施有哪些缺点,特别是 //怀疑评论的实施?
我是否需要免费的shared_ptr 指针(我想在我的单元测试中分配的方式不可能)?
有什么建议吗?非常感谢!
static boost::shared_ptr<Class1> getInstanceOfClass1();
boost::shared_ptr<Class1> Class2::getInstanceOfClass1()
{
boost::shared_ptr<Class1> inst1 = boost::make_shared<Class1>();
//.... some instructions on inst1
return inst1 ;
}
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);
}
答案 0 :(得分:1)
虽然这是一个奇怪的用例,但应该没问题。
Class2 a = *(Class2::getInstanceOfClass1()); //suspected
通过调用Class2
的ctor创建a
实例Class2
,其中Class1
从getInstanceOfClass1
获取共享指针中返回的Class1
。嵌套的临时(共享指针)将在表达式的末尾自动删除,删除用于在整个表达式末尾初始化a
的{{1}}实例
么?也许你打算写Class1 a = ...
?在这种情况下,我建议你考虑
auto ap = Class2::getInstanceOfClass1();
int code = ap->useInputAndReturnCode(input);
避免创建Class1
。
答案 1 :(得分:1)
您不必释放shared_ptr,因为当没有shared_ptr指向它时,指向的对象会自动销毁。 另一方面,你必须确保不要在同一个对象上混合shared_ptr和常规指针:如果对象被boost破坏,因为没有shared_ptr指向它,你会在尝试访问它时因为常规指针而出错