小编Ima*_*zel的帖子

为什么移动语义与动态内存分配中的浅复制具有相同的行为?

在处理动态内存分配的类中,浅复制基本上会导致程序删除资源两次。在移动操作中,原始指针不再指向资源,那么为什么在移动语义中会出现相同的行为呢?例如:

#include <utility>
#include <cstring>
using namespace std;
class MyString
{
    char* cstr;
 public:
    MyString(const char* arg)
    : cstr(new char[strlen(arg)+1])
    {
        strcpy(cstr, arg);
    }
    MyString(MyString&&) = default;
    MyString& operator=(MyString&&) = default;
    MyString(const MyString&) = delete;
    MyString& operator=(const MyString&) = delete;
    ~MyString()
    {
        delete[] cstr;
    }
};

int main()
{
    MyString S1{"aaa"};
    MyString S2 = move(S1); // error

}
Run Code Online (Sandbox Code Playgroud)

我尝试过 3 个不同的编译器,得到了相同的结果。

c++ shallow-copy c++11 c++14

1
推荐指数
1
解决办法
857
查看次数

标签 统计

c++ ×1

c++11 ×1

c++14 ×1

shallow-copy ×1