使用不同的参数C ++调用函数

时间:2014-10-29 06:08:16

标签: c++ performance coding-style

这个问题仅用于改进目的。下面有一个功能:

void Func_A(u8* arg) {
    bool local_arg=false;
    if(!arg) {
        //allocate memory for arg 
        local_arg=true;
    }
    //process arg

我从多个地方使用NULL和非NULL参数调用此函数。 我只是想问一下,如果没有local_arg,有更好的方法来处理这样的事情。

1 个答案:

答案 0 :(得分:0)

您有时可以使用......

u8* p = arg ? arg : new u8(...);

...do things with *p...

if (!arg) delete p;

有点发烧友,您可以编写一个具有运行时可配置所有权的智能指针:

template <typename T>
class Uncertain_Ownership_Ptr
{
  public:
    enum Ownership { Own_It, Dont_Own_It };
    Uncertain_Ownership_Ptr(T* p, Ownership own) : p_(p), own_(own) { }
    Uncertain_Ownership_Ptr(const Uncertain_Ownership_Ptr&) = delete;
    void operator=(const Uncertain_Ownership_Ptr&) = delete;
    ~Uncertain_Ownership_Ptr() { if (own_ == Own_It) delete p_; }
    T& operator*() { return *p_; }
    const T& operator*() const { return *p_; }
    T* operator->() { return p_; }
    const T* operator->() const { return p_; }
  private:
    T* p_;
    Ownership own_;
};

...则...

void Func_A(u8* arg)
{
    Uncertain_Ownership_Ptr p(arg ? arg : new u8(...),
        arg ? Uncertain_Ownership_Ptr::Dont_Own_It : Uncertain_Ownership_Ptr::Own_It);

    // use *p ...
}