首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向量、unique_ptr和push_back出错

向量、unique_ptr和push_back出错
EN

Stack Overflow用户
提问于 2022-04-02 09:36:45
回答 1查看 262关注 0票数 5

我正在学习智能指针,下面的示例是test.cpp

代码语言:javascript
运行
复制
#include<iostream>
#include<vector>
#include<memory>

struct abstractShape
{
    virtual void Print() const=0;
};

struct Square: public abstractShape
{
    void Print() const override{
        std::cout<<"Square\n";
    }
};

int main(){
    std::vector<std::unique_ptr<abstractShape>> shapes;
    shapes.push_back(new Square);

    return 0;
}

上述代码有一个编译错误"c++ -std=c++11 test.cpp":

代码语言:javascript
运行
复制
smart_pointers_2.cpp:19:12: error: no matching member function for call to 'push_back'
    shapes.push_back(new Square);

有人能帮我解释一下错误吗?顺便说一句,当我将push_back改为emplace_back时,编译器只会发出警告。

EN

Stack Overflow用户

回答已采纳

发布于 2022-04-02 09:39:33

push_back需要一个std::unique_ptr,当传递像new Square这样的原始指针(被认为是复制初始化)时,原始指针需要隐式转换为std::unique_ptr。隐式转换失败,因为std::unique_ptr的原始指针转换构造函数被标记为explicit

emplace_back之所以工作,是因为它将参数转发给std::unique_ptr的构造函数,并以直接初始化的形式构造元素,其中考虑了explicit转换构造函数。

的论点args..。作为std::forward<Args>(args)....

转发给构造函数。

票数 7
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71716400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档