将const指针作为参数传递时出错

时间:2016-01-11 01:25:44

标签: c++ pointers parameters reference const

我正在尝试更正一段C ++代码。 (它是为此目的而编写的,错误也是如此......)

  

错误:从'const Book*'std::vector<Book*>::value_type {aka Book*}' [-fpermissive]

的转换无效

在这个方法中

void Bibliography::addBook(const Book *newBook)
{
    books.push_back(newBook);
}

向量定义为

std::vector<Book *> books;

现在我的主要问题是,const达到了多远?它是什么意思&#34;这个功能无法修改newBook&#34;或者它是否也使向量中的元素成为常量?

基于这个答案,我是否必须删除const,还是有其他方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

  

来自评论:

     

std::vector<const Book *> books;会好吗?

     
    不,这本书是可编辑的

  

如果要推送到向量中的book指针保持可变,则需要从参数类型const中删除addBook限定符。否则,指针传递的book对象必须被视为const

  

还有另一种解决方法吗?

我建议使用共享或唯一智能指针的向量代替常规指针向量。这有助于您自动管理内存:

std::vector<std::unique_ptr<Book>> books;
从向量中移除Book对象时,

Unique pointers将释放内存。