关于值类和向量的问题 矢量元素必须从C++标准的类23.2.4类模板向量中赋值:

关于值类和向量的问题 矢量元素必须从C++标准的类23.2.4类模板向量中赋值:,c++,C++,Q1:我假设这是因为以某种方式指定了常量路径,和/或没有定义赋值运算符-为什么默认运算符不起作用?在我的对象上定义const是因为我定义了一个const路径吗?const在这里给我赢得了什么吗 问题2:其次,在这些值对象的向量中,我的对象内存安全吗?(意思是,它们会自动为我删除)。我读到向量在默认情况下被分配到堆中——这是否意味着我需要“删除”任何内容 问题3:第三,为了防止复制整个向量,我必须创建一个将向量作为引用传递的参数,如下所示: // static FileReference::Que

Q1:我假设这是因为以某种方式指定了常量路径,和/或没有定义赋值运算符-为什么默认运算符不起作用?在我的对象上定义const是因为我定义了一个const路径吗?const在这里给我赢得了什么吗

问题2:其次,在这些值对象的向量中,我的对象内存安全吗?(意思是,它们会自动为我删除)。我读到向量在默认情况下被分配到堆中——这是否意味着我需要“删除”任何内容

问题3:第三,为了防止复制整个向量,我必须创建一个将向量作为引用传递的参数,如下所示:

// static
FileReference::Query(const FileReference& reference, std::vector<FileReference>& files) {
    // push stuff into the passed in vector
}
//静态
FileReference::Query(常量FileReference&reference,std::vector&files){
//将内容推入传入向量
}
当函数终止时,返回我不想终止的大型对象的标准是什么。在这里或类似的地方使用共享的ptr会让我受益吗

  • 如果任何成员变量为
    const
    ,则无法创建默认赋值运算符;编译器不知道您希望发生什么。您必须编写自己的运算符重载,并找出您想要的行为。(因此,
    const
    成员变量通常没有人们最初想象的那么有用。)

  • 只要您不拥有原始内存或其他资源,就没有什么需要清理的。一个
    std::vector
    在其生命周期结束时总是正确地删除其包含的元素,只要它们反过来总是正确地清理自己的资源。在您的例子中,您唯一的成员变量是一个
    std:string
    ,它也会照顾自己。所以你完全安全了

  • 您可以使用共享指针,但除非您在这里进行分析并确定瓶颈,否则我不会担心它。特别是,您应该了解编译器在许多情况下都可以执行的操作


  • <>代码>矢量<代码>元素必须从C++标准的类23.2.4类模板向量中赋值:

    …存储对象应满足可分配的要求

    拥有
    const
    成员会使类不可分配


    由于元素是按值存储的,因此当向量被销毁或从向量中删除时,它们将被销毁。如果元素是原始指针,那么它们必须显式地
    delete
    d.

    class FileReference
    而不是
    class File
    ?另外,类声明缺少一个
    结尾。谢谢,只是一个简短的提示。谢谢你的链接。真的很有帮助。编译器有着惊人的魔力。