【发布时间】:2012-06-28 01:39:01
【问题描述】:
更多 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:其次,在这些值对象的向量中,我的对象是内存安全的吗? (意思是,它们会被我自动删除)。我读到here,默认情况下向量被分配给堆——这是否意味着我需要“删除”任何东西。
Q3:第三,为了防止复制整个向量,我必须创建一个将向量作为参考传递的参数,例如:
// static
FileReference::Query(const FileReference& reference, std::vector<FileReference>& files) {
// push stuff into the passed in vector
}
当函数死亡时返回我不想死亡的大对象的标准是什么。我会从在这里使用 shared_ptr 或类似的东西中受益吗?
【问题讨论】:
-
是
class FileReference而不是class File?此外,类声明末尾缺少;。 -
谢谢,只是一个快速的存根
标签: c++