gpt4 book ai didi

c++ - 返回值优化和私有(private)复制构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:23:05 25 4
gpt4 key购买 nike

我编写了一个简单的链表,因为最近的面试编程挑战向我展示了我的 C++ 变得多么生疏。在我的列表中,我声明了一个私有(private)复制构造函数,因为我想明确避免制作任何拷贝(当然,懒惰)。当我想按值返回一个拥有我的列表之一的对象时,我遇到了一些麻烦。

class Foo
{
MyList<int> list; // MyList has private copy constructor

public:
Foo() {};
};

class Bar
{
public:
Bar() {};

Foo getFoo()
{
return Foo();
}
};

当我尝试按值返回 Foo 对象时,我收到一个编译器错误,指出 MyList 有一个私有(private)复制构造函数。 Return-Value-Optimization 是否应该取消任何复制的需要?我需要写一个复制构造函数吗?在我开始寻找这个问题的解决方案之前,我从未听说过移动构造函数,这是最好的解决方案吗?如果是这样,我将不得不阅读它们。如果不是,解决此问题的首选方法是什么?

最佳答案

标准明确指出构造函数仍然需要可访问,即使它被优化掉了。请参阅最近草稿中的 12.8/32

在这种情况下,我更喜欢使对象可移动且不可复制。它使所有权非常清晰明确。

否则,您的用户始终可以使用 shared_ptr。隐藏共享所有权充其量是一个有问题的想法(除非你能保证你所有的值(value)观都是不可变的)。

关于c++ - 返回值优化和私有(private)复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11209326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com