Search code examples
windowsmfccomvariant

(VariantCopy) does VARIANT have default-copy function, or do i have to write copy-function & overider operator =


VARIANT copy problem, for multi-threads

does VARIANT have default-copy function, or do i have to write copy-function & overider operator =

https://learn.microsoft.com/en-us/windows/desktop/winauto/variant-structure

https://learn.microsoft.com/en-us/windows/desktop/api/oaidl/ns-oaidl-tagvariant


Solution

  • is this ok?

    class Data() 
    {
    protected:
      VARIANT m_var;
    public:
      Data()
      {
        VariantInit(&m_var);
      }
      ~Data()
      {
        VariantClear(&m_var);
      }
    
      Data(const Data& other)
      {
        VariantInit(&m_var);
        VariantCopy(&m_var, &other.m_var);
      }
      Data& operator = (const Data& other)
      {
        if(this == &other)
            return *this;
        VariantInit(&m_var);
        VariantCopy(&m_var, &other.m_var);
        return *this;
      }
    
      Data(Data&& other)
      {
        VariantInit(&m_var);
        VariantCopy(&m_var, &other.m_var);
        VariantClear(&other.m_var);
      }
      Data& operator = (Data&& d)
      {
        if(this == &other)
            return *this;
        VariantInit(&m_var);
        VariantCopy(&m_var, &other.m_var);
        VariantClear(&other.m_var);
        return *this;
      }
    }