Cha*_*rly 3 c++ oop naming-conventions
有没有办法编码方法的签名,无论对象所有者是否发生变化?在获取或返回指针的Getter()和Setter()中,您永远不知道对象所有权是否发生了变化.
你有什么想法:
// Uses pConfiguration or creates its own copy - the ownership is un-touched
void ContainerClass:SetConfiguration( const Configuration* pConfiguration ) {}
// Takes the ownership of pConfiguration (and deletes it in the destructor)
void ContainerClass:PutConfiguration( Configuration* pConfiguration ) {}
// Returns a 'reference' and keeps the ownership (you must not delete it)
const Configuration* ContainerClass::GetConfiguration() {}
// Returns a _new_ object and transfers the ownership to you
Configuration* ContainerClass::TakeConfiguration() {}
Run Code Online (Sandbox Code Playgroud)
那么Set()和Put()以及Get()和Take()是一种编码方式,或者你会使用类型(const与非const) - 或者你是否从上下文中知道它?
最好的祝福,
查理
在接口中识别所有权未更改的最佳方法是不使用指针.更喜欢引用指针:
// Does not take ownership
void ContainerClass::SetConfiguration( const Configuration& config ) {}
// Does not release ownership
const Configuration& ContainerClass::getConfiguration() const {}
Run Code Online (Sandbox Code Playgroud)
当您需要实际转移内存的所有权时,最好通过名称进行记录.如果您真的感到渴望在签名中明确表达,请使用好老std::auto_ptr
:
void ContainerClass::SetConfiguration( std::auto_ptr<Configuration> cfg );
std::auto_ptr<Configuration> ContainerClass::CopyConfiguration() const;
Run Code Online (Sandbox Code Playgroud)
该std::auto_ptr
有怪异的属性,复制,其实就是转移所有权.