c++ - 从构造函数中删除这个指针
问题描述
我尝试从构造函数中删除此指针,然后当我通过成员函数访问私有变量时,该变量被正确获取。
如果我尝试再次删除它(在构造函数或 func() 中),我的程序会崩溃。这意味着这个指针在构造函数中被删除了。
class B
{
int a;
public:
B()
{
std::cout << this;
std::cout << "\nConstructor\n";
delete this;
a = 5;
std::cout << "\n" << this;
}
~B()
{
std::cout << "Destructor\n";
}
void func()
{
std::cout << "\n" << a << " Func\n";
}
};
int main(int argc, char* argv[])
{
B *b = new B();
b->func();
return 0;
}
但是调用 func() 会打印正确的输出。由于删除了这个,我预计会出现一些错误。为什么 func() 的隐式参数在删除时不更新?
解决方案
delete this
是允许的,很好。但是,在删除类后访问该类的任何成员是不允许的,并且是未定义的行为。您的代码似乎可以工作是 UB 可以采用的一种形式。
推荐阅读
- elasticsearch - Elasticsearch - 分片中每个别名的 tf-idf 计算
- javascript - 如何与@rollup/plugin-node-resolve 捆绑?
- javascript - 捕获 HTML 表单“Enter”按执行 AJAX,而不是 Post
- drop-down-menu - 根据下拉列表计算
- ios - iOS14上UILabel中显示的NSAttributedString错误
- pandas - 计算所有组的某一列的最小值,并从该组的某一列的所有值中减去该值
- python - 如何使用 Python API 访问 minio 存储桶,读取所有文件夹并将它们写入数据库?
- 4gl - 有没有办法在 Genero 2.5 中使用“Segoe MDL2 Assets”图标作为图像源?
- html - 如果选择器不适用,CSS 会加载 url() 吗?
- javascript - REACT-REDUX-EXPRESS,无法更新用户字段,404 错误