我想将数据移到其他范围。它似乎有用......但是对象的析构函数seems to crush application with runtime exception:
#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 :(得分:0)
当您使用new[]
运算符分配内存时,必须使用delete[]
运算符释放它,否则您将获得未定义的行为(这是崩溃背后最常见的原因之一)。
此外,当您移动指针时,您应该清除旧指针,因为它没有自动完成,并且可以通过sae指针为您留下两个(或更多)对象。