|
|
|
|
|
by MaulingMonkey
3355 days ago
|
|
These typically have null-like states in C++. If we were making a std::ifstream clone without templates inheritence, etc. we might write... class ifstream {
FILE* f;
ifstream(const ifstream&) = delete;
ifstream& operator=(const ifstream&) = delete;
public:
ifstream(): f() {}
explicit ifstream(const char* path): f(fopen(path, "rb")) {}
~ifstream() { if (f) fclose(f); }
ifstream(ifstream&& original): f() {
std::swap(f, original.f);
}
ifstream& operator=(ifstream&& original) {
std::swap(f, original.f);
return *this;
}
// ...
};
This is very similar to the common pattern of implementing vanilla assignment in terms of copy construction and a swap.EDIT: Added deleted copy ctor/assignment ops because I'm not a savage. |
|