c++ - 从函数返回局部值而不触发复制构造函数

标签 c++ class oop copy-constructor copy-elision

我正在尝试使用 c++ 类型系统删除复制构造函数以防止复制对象。

struct DeleteCopyConstructor {
    DeleteCopyConstructor() {};
    DeleteCopyConstructor(DeleteCopyConstructor& op2) = delete;
    DeleteCopyConstructor(const DeleteCopyConstructor& op2) = delete;
};

DeleteCopyConstructor f() {
    DeleteCopyConstructor d;
    // initialize d...
    return d;
}

错误是:

error: use of deleted function ‘DeleteCopyConstructor::DeleteCopyConstructor(const DeleteCopyConstructor&)’

我读过有关复制省略的内容,但它似乎是一种编译器优化,所以我认为它不适用。如何在不触发复制构造的情况下返回 d

最佳答案

在 C++17 中 the compiler is guaranteed to elide the copy .但是在所有情况下,您仍然需要有一个有效的复制构造函数。

因此,如果您只关心性能,则无需执行任何操作。如果你想删除复制构造函数,因为该值在逻辑上不应该是可复制的,那么据我所知没有办法做到这一点。你必须返回 std::unique_ptr<T>或者通过引用获取值并以这种方式进入它。编辑:或者定义一个移动构造函数。

关于c++ - 从函数返回局部值而不触发复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44750550/

相关文章:

c++ - 无法将 initializer_list 转换为类 <int>

c++ - 通过搜索单词拼字游戏得分 c++

c++ - 如何访问超出范围的类?

firebase - Kotlin - 可序列化类中的初始化 block 只能读取默认属性值

java - 将枚举值与类字段匹配

c++ - 尝试在 C++ 函数中添加数组的整数失败

c++ - 作为友元函数的函数指针

c++ - CUDA:请帮我找出代码中的错误

c++ - Win32 API : Creating file public for current user but private for everyone else

c++ - 如何定义两个相互依赖的类,最好是在同一个头文件中?