その他の 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: 第 3 に、ベクター全体のコピーを防ぐために、次のようにベクターを参照として渡すパラメーターを作成する必要があります。
// static
FileReference::Query(const FileReference& reference, std::vector<FileReference>& files) {
// push stuff into the passed in vector
}
関数が終了したときに終了したくない大きなオブジェクトを返すための標準は何ですか。ここで shared_ptr などを使用するとメリットがありますか?