具有对象应为const的共享指针的函数调用

时间:2018-10-25 12:02:01

标签: c++ shared-ptr smart-pointers

我有一个变量a,其类型为A

A a;

我想调用一个函数,该函数将类型为A的const引用作为输入参数。

fun(const A &a);

在更改了一些代码之后,我决定最好将变量a的类型更改为std::shared_ptr<A>

std::shared_ptr<A> a;

更改函数fun的最佳方法是什么,以确保对象a从未更改(应该保持const)?

fun应该保持不变,我应该这样称呼:

fun(*a.get())

还是有其他选择?不知何故,这对我来说很难看...

我想简单地将fun更改为fun(const std::shared_ptr<A> &a)是行不通的,因为我想确保该函数不会更改基础对象而不是共享指针。

我不能使用std::shared_ptr<const A> a,因为有必要在某个时候更改变量a

1 个答案:

答案 0 :(得分:5)

由于export interface IPagedResults<T>{ results: T; totalRecords: number; } 似乎对参数的生存期没有任何影响,因此请保持签名不变(传递void fun(const A& a);std::shared_ptr作为函数参数总是提示这些对生命的影响)。这样称呼它:

std::unique_ptr

通过这种方式,您可以绕开冗长的auto a = std::make_shared<A>(); fun(*a); 并直接使用*a.get()提供的dereference operator