It also makes sense for reusable objects, especially heavyweight objects that are expensive to create and destroy, but cheap to recycle.
An example of reusable objects would be the C++ file streams. You can use it once by create, open, close, then destroy; or reuse with create, open, close, open, close, open, close, ... etc., then destroy.
And conveniently, (some of) the constructors call open(), and the destructors call close() for you, so actual use can look like: create, destroy, or create, open, destroy, or create, close, open, destroy. Very nice design - very flexible.
Another benefit of that, is it makes the destructor and constructor implementation cleaner, especially when you have multiple constructors (and don't yet have constructor chaining).
MyFile::MyFile()
{
}
MyFile::MyFile(filename)
{
this->Open(filename);
}
My::MyFile(data)
{
this->OpenFromData(data);
}
MyFile::Open(filename)
{
data = ::LoadFileData(filename);
this->OpenFromData(data);
}
MyFile::OpenFromData(data)
{
//actual loading from data...
}
Edit: Bah, code boxes messing up.