Лучший способ определить в интерфейсе, что право собственности не изменилось, - это не использовать указатели. Предпочитаю ссылки на указатели:
// Does not take ownership
void ContainerClass::SetConfiguration( const Configuration& config ) {}
// Does not release ownership
const Configuration& ContainerClass::getConfiguration() const {}
Когда вам нужно передать право собственности на память, лучше документировать ее по именам. Если вы действительно хотите сделать это явно в подписи, используйте старый добрый std::auto_ptr
:
void ContainerClass::SetConfiguration( std::auto_ptr<Configuration> cfg );
std::auto_ptr<Configuration> ContainerClass::CopyConfiguration() const;
std::auto_ptr
обладает странным свойством, которое copy на самом деле означает , передающее владение