我可以通过引用函数来传递 auto_ptr 吗?

发布于 2024-08-26 08:06:47 字数 92 浏览 8 评论 0原文

下面的函数就OK了:

void DoSomething(auto_ptr< … >& a)....

is the following function OK:

void DoSomething(auto_ptr< … >& a)....

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

白况 2024-09-02 08:06:47

你可以做到,但我不确定你为什么要这样做。

如果您使用 auto_ptr 来指示 ptr 的所有权(正如人们通常所做的那样),那么如果您想将 ptr 的所有权转移给函数,则只需将 auto_ptr 传递给函数,在这种情况下,您将传递按值传递 auto_ptr:

void DoSomething(auto_ptr<int> a)

因此任何调用 DoSomething 的代码都会放弃对 ptr 的所有权:

auto_ptr<int> p (new int (7));
DoSomething (p);
// p is now empty.

否则只需按值传递 ptr:

void DoSomething(int* a)
{...}

...

auto_ptr<int> p (new int (7));
DoSomething (p.get ());
// p still holds the ptr.

或将引用传递给指向的对象:

void DoSomething(int& a)
{...}

...

auto_ptr<int> p (new int (7));
DoSomething (*p);
// p still holds the ptr.

第二种通常更可取,因为它更明确地表明 DoSomething 不太可能尝试删除该对象。

You can do it but I'm not sure why you would want to do it.

If you're using the auto_ptr to indicate ownership of the ptr (as people generally do), then you only need to pass the auto_ptr to a function if you want to transfer ownership of the ptr to the function, in which case you would pass the auto_ptr by value:

void DoSomething(auto_ptr<int> a)

So any code calling DoSomething relinquishes ownership of the ptr:

auto_ptr<int> p (new int (7));
DoSomething (p);
// p is now empty.

Otherwise just pass the ptr by value:

void DoSomething(int* a)
{...}

...

auto_ptr<int> p (new int (7));
DoSomething (p.get ());
// p still holds the ptr.

or pass a ref to the pointed to object:

void DoSomething(int& a)
{...}

...

auto_ptr<int> p (new int (7));
DoSomething (*p);
// p still holds the ptr.

The second is usually preferable as it makes it more explicit that DoSomething is unlikely to attempt to delete the object.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文