C ++确保对象在执行函数时存在

C++ ensure object exists while executing a function

我有一个函数foo。在执行 foo 期间,我想确定 Bar 类型的对象存在。让我们调用恰好是“bar”的任何对象。

我无法复制或移动 bar,并且 bar 可以有任何存储期限。关于 bar 我知道的一件事是它是一个空对象。

foo 不需要对 bar 做任何事情或了解它。

我有哪些选择可以确保 barfoo 期间存在,它们的优势和局限性是什么?

the calling environment could pass a dangling reference into foo

真的不行。悬挂引用是不合法的,因此发生这种情况的唯一方法是调用者违反语言规则。我认为这不是一个令人信服的问题。

pass a shared_ptr to bar in. But this would require bar to have dynamic storage duration.

不完全是。 shared_ptr 可以用自定义删除器构造,所以如果调用者想传入一个“堆栈分配”Bar,他们可以用一个不删除任何东西的删除器构造一个 shared_ptr .

bar is that it is an empty object

那么整个练习的重点是什么?是不是因为 Bar 构造函数 and/or 析构函数有副作用,必须 before/after foo 运行?如果是这样的话,也许 foo 应该自己做这些事情,或者可以创建一个 foo_wrapper 函数来隐藏这些细节。