在进行PWA时,在std :: shared_ptr <a> where A has dynamic array

时间:2019-03-11 19:50:33

标签: c++ c++11 stdmove

first, my code:

struct A {
  A(int size);
  ~A();

  A(A&& other);
  A& operator=(const A& other);
  uint8_t* data = nullptr;
};

A::A(int size)
{
  data = new uint8_t[size];
}

A::~A()
{
  delete [] data;
  data = nullptr;
}

A::A(TPixel &&other)
{
  data = other.data;
}

A& A::operator=(const A& other)
{
  data = other.data;
}

I have two variable

std::shared_ptr<A> a = std::make_shared<A>(5);
std::shared_ptr<A> b = std::make_shared<A>(5);

I tried std::swap(a, b); and found error in valgrind: std::enable_if<std::__and_<std::is_move_constructible<A*>, std::is_move_assignable<A*> >::value, void>::type std::swap<A*>(A*&, A*&)

Why I get this error? I have implemented move operators and when I tested std::is_move_assignable and std::is_move_constructible the return value was true.

1 个答案:

答案 0 :(得分:3)

  

在valgrind中发现错误:   std::enable_if<std::__and_<std::is_move_constructible<A*>, std::is_move_assignable<A*> >::value, void>::type std::swap<A*>(A*&, A*&)

     

为什么会出现此错误?

您显示的内容不是错误。这是一个函数声明。

  

我已经实现了移动运算符

您尚未实现移动分配运算符。


P.S。

  • 您尚未定义move构造函数。
    • 您已定义了一个未声明的构造函数:A::A(TPixel &&)。这可能是相关的。
  • 副本分配运算符
    • 释放记忆力。
    • 将两个对象都指向同一数组。
  • 如果对象已被复制分配并且副本已被销毁,则析构函数具有未定义的行为。