如何使用默认移动构造函数将数据移出范围
How to be able to move data out of scope using default move constructor?
我想将数据移动到其他范围内。它似乎有效...然而,对象的析构函数似乎会因运行时异常而破坏应用程序:
#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 指针中留下两个(或更多)对象。
相关文章:
- 将字符移出范围的危险
- 将移出参数的最佳做法
- 是否可以将值分配给移出位置?
- 将键移出 std::map<> &&
- 移出某些元素后无法从矢量中删除
- 当鼠标移出窗口时,SFML 窗口会自行关闭
- 虚拟析构函数将对象移出 rodata 部分
- 将代码移出类定义时未扩展参数包
- 如何将变量从 for 循环中移出?
- 在移出向量上调用 size() 方法是否安全?
- 如何将 cdparanoia 读取的 CD 音频数据移交给 ALSA 播放器?
- 从移出对象移动
- 在 2D 阵列板中移动并防止玩家移出板
- 可以将std::getline()与从std::string中移出的字符串一起使用吗
- 是否可以将 std::move 对象移出函数?(C++11).
- 无法按列名从SQL表中获取数据.给出错误.只能通过列数来做同样的事情
- 是否应将移出对象保留为"safe"状态?
- 如何将unique_ptr移出矢量<Foo><unique_ptr>?
- 如何使用默认移动构造函数将数据移出范围
- 用C++对作为数据给出的任意函数进行有效求值