Как иметь возможность перемещать данные из области видимости, используя конструктор перемещения по умолчанию?

Я хочу переместить данные в другую область. И это похоже на работу … пока что деструктор объекта Кажется, что приложение разрушает с исключением времени выполнения:

#include <iostream>
using namespace std;

struct A {
void * data;
A() {
data = new char[10000];
std::cout << "A()" << std::endl;
}

~A() {
if(data != nullptr) {
delete [] ((char *)data);
std::cout << "Deleted Data!" << std::endl;
}
std::cout << "~A() " << std::endl;
}
};

void aDo2(A && a) {
cout << "Do2" << endl;
}

void aDo(A && a) {
cout << "Do" << endl;
aDo2(A(a));
}int main() {
{
A a;
{
aDo(move(a));
}

cout << "why" << endl;
}
cout << "here?" << endl;
// your code goes here
return 0;
}

Как сделать так, чтобы переход в другую область работал правильно?

0

Решение

Когда вы выделяете память с new[] оператор вы должны освободить его с delete[] оператор, в противном случае вы получите неопределенное поведение (что является одной из наиболее распространенных причин аварий).

Кроме того, когда вы перемещаете указатель, вы должны очистить старый указатель, так как он не выполняется автоматически и может оставить вас с двумя (или более) объектами с указателем sae.

0

Другие решения


По вопросам рекламы [email protected]