gpt4 book ai didi

c++ - std::shared_ptr 模板化与非模板化复制/移动构造函数

转载 作者:搜寻专家 更新时间:2023-10-31 01:34:49 30 4
gpt4 key购买 nike

This page显示 std::shared_ptr 具有复制/移动构造函数的模板化和非模板化版本(页面上的 (9) 和 (10))。同样,它也有两个版本的复制/移动赋值运算符(参见 here)。

为什么我们需要非模板版本?单靠模板化版本还不够吗?

最佳答案

模板化版本不是复制构造函数。根据标准 §12.8[class.copy]/2 我们有:

A non-template constructor for class X is a copy constructor if its first parameter is of type X&, const X&, volatile X& or const volatile X&, and either there are no other parameters or else all other parameters have default arguments (8.3.6).

同样,根据 §12.8[class.copy]/17,模板化版本也不是复制赋值运算符:

A user-declared copy assignment operator X::operator= is a non-static non-template member function of class X with exactly one parameter of type X, X&, const X&, volatile X& or const volatile X&.

移动构造函数也是如此(在 §12.8[class.copy]/3):

A non-template constructor for class X is a move constructor if its first parameter is of type X&&, const X&&, volatile X&&, or const volatile X&&, and either there are no other parameters or else all other parameters have default arguments (8.3.6).

并移动赋值运算符,在 §12.8[class.copy]/19:

A user-declared move assignment operator X::operator= is a non-static non-template member function of class X with exactly one parameter of type X&&, const X&&, volatile X&&, or const volatile X&&.

关于c++ - std::shared_ptr 模板化与非模板化复制/移动构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38541369/

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