This reverts commit e48b1c8a. This reverts commit d019de23. The changes caused memory leaks (non-final classes cannot use unique_ptr).