Я хочу переместить данные в другую область. И это похоже на работу … пока что деструктор объекта Кажется, что приложение разрушает с исключением времени выполнения:
#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;
}
Как сделать так, чтобы переход в другую область работал правильно?
Когда вы выделяете память с new[]
оператор вы должны освободить его с delete[]
оператор, в противном случае вы получите неопределенное поведение (что является одной из наиболее распространенных причин аварий).
Кроме того, когда вы перемещаете указатель, вы должны очистить старый указатель, так как он не выполняется автоматически и может оставить вас с двумя (или более) объектами с указателем sae.