gpt4 book ai didi

c++ - vector::emplace_back 与 shared_ptr 的用法

转载 作者:可可西里 更新时间:2023-11-01 16:38:13 26 4
gpt4 key购买 nike

#include <iostream>
#include <vector>
#include <memory>
using namespace std;

struct BinaryTree
{
int element;
shared_ptr<BinaryTree> left;
shared_ptr<BinaryTree> right;
};

int main()
{
vector<shared_ptr<BinaryTree>> vecBT;

// case I
vecBT.emplace_back(new BinaryTree{10, nullptr, nullptr});

// case II
vecBT.emplace_back(shared_ptr<BinaryTree>(new BinaryTree{20, nullptr, nullptr}));

return 0;
}

http://en.cppreference.com/w/cpp/container/vector/emplace_back
template< class... Args >
void emplace_back( Args&&... args );

http://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr
template< class Y >
explicit shared_ptr( Y* ptr );

问题> 我通过http://www.compileonline.com/compile_cpp11_online.php编译了上面的代码没有错误。

我的问题是 case I 如何通过编译器而不产生错误。由于 shared_ptr 的构造函数需要显式构造。所以我希望只有 case II 是正确的。

最佳答案

两种情况都是正确的,std::shared_ptr 的构造函数是显式的,但这正是从 emplace_back 中调用的,它只是将其参数转发给显式构造函数调用。这不同于将 std::shared_ptr 作为参数并请求隐式转换。

关于c++ - vector::emplace_back 与 shared_ptr 的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19822322/

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