我想将 a 传递unique_ptr
给辅助函数,并且我想确保辅助函数既不修改指针,也不修改指向的对象。没有unique_ptr
, 解决方案是有
void takePtr(AClass const * const aPtr) {
// Do something with *aPtr.
// We cannot change aPtr, not *aPtr.
}
(嗯,从技术上讲,AClass const * aPtr
就足够了。)我可以用
AClass * aPtr2 = new AClass(3);
takePtr(aPtr2);
我想改用unique_ptr
,但不知道怎么写。我试过了
void takeUniquePtr(unique_ptr<AClass const> const & aPtr) {
// Access *aPtr, but should not be able to change aPtr, or *aPtr.
}
当我用
unique_ptr<AClass> aPtr(new AClass(3));
takeUniquePtr(aPtr);
它不编译。我看到的错误是
testcpp/hello_world.cpp:141:21: error: invalid user-defined conversion from ‘std::unique_ptr<AClass>’ to ‘const std::unique_ptr<const AClass>&’ [-fpermissive]
转换不应该unique_ptr<AClass>
是unique_ptr<AClass const>
自动的吗?我在这里想念什么?
顺便说一句,如果我在函数定义中更改unique_ptr<AClass const> const & aPtr
为unique_ptr<AClass> const & aPtr
,它会编译,但是我可以调用类似的函数aPtr->changeAClass()
,这是我不想允许的。