更多 C++ 学习问题。我一直在使用带有原始指针的向量并取得了一定程度的成功,但是,我一直在尝试使用值对象来代替。我遇到的第一个问题通常是编译错误。编译以下代码时出现错误:
class FileReference {
public:
FileReference(const char* path) : path(string(path)) {};
const std::string path;
};
int main(...) {
std::vector<FileReference> files;
// error C2582: 'operator =' function is unavailable in 'FileReference'
files.push_back(FileReference("d:\\blah\\blah\\blah"));
}
Q1:我假设这是因为以某种方式指定了 const 路径和/或未定义赋值运算符 - 为什么默认运算符不起作用?即使我假设这是因为我定义了一个 const 路径,是否在我的对象上定义 const , const 甚至在这里为我赢得了什么?
Q2:其次,在这些值对象的向量中,我的对象是内存安全的吗?(意思是,它们会被我自动删除)。我在这里读到,默认情况下向量被分配给堆——这是否意味着我需要“删除”任何东西。
Q3:第三,为了防止整个向量的复制,我必须创建一个将向量作为参考传递的参数,例如:
// static
FileReference::Query(const FileReference& reference, std::vector<FileReference>& files) {
// push stuff into the passed in vector
}
当函数死亡时,返回我不想死的大对象的标准是什么。我会从在这里使用 shared_ptr 或类似的东西中受益吗?