相关疑难解决方法(0)

"删除这个"是否安全?

在我最初的基本测试中,这样做是完全安全的.然而,它已经让我吃惊试图操纵this该功能后delete小号this可能是一个运行时错误.这是真的,通常是安全的delete this吗?或者只有某些安全的情况?

c++ runtime-error self-destruction

33
推荐指数
5
解决办法
3万
查看次数

"删除这个"有什么用?

今天,我看到了一些遗留代码.在析构函数中有一个类似" delete this" 的语句.我想,这个调用将是递归的.它为什么有效?

我在Y!上做了一些快速搜索,我发现如果需要限制用户创建堆栈对象,我们可以将析构函数设为私有,并提供删除实例的接口.在提供的接口中,我们必须在此指针上调用delete.

是否还有其他使用此类陈述的情况?

c++ destructor memory-management self-destruction

28
推荐指数
2
解决办法
5400
查看次数

成员函数中"删除此"的有用性

可能重复:
使用"删除此项"删除当前对象是否可以?
对象是否应该在C++中删除自己?

我刚刚在programmers.stackexchange上遇到过这个问题,并且看到了关于在delete this;成员函数内部进行操作的问题.

根据我的理解,这通常是禁止的,但是在某些情况下这可能是有用的.什么时候会有用,哪些技术原因没有?

c++ this delete-operator

8
推荐指数
2
解决办法
2940
查看次数

为什么 Visual Studio 在没有优化的情况下可以正确编译此函数,但在优化时却编译错误?

我正在做一些类似 y 组合器的 lambda 包装的实验(尽管我知道它们实际上并不是严格意义上的 y 组合器),但我遇到了一个非常奇怪的问题。我的代码在调试配置中完全按照我的预期运行(关闭优化),但跳过了发布中的大(而且很重要!)位(设置为Optimizations (Favor Speed) (/Ox))。

请注意,lambda 函数的内部基本上无关紧要,它们只是为了确保它可以正确递归等。

// main.cpp
#include <iostream>
#include <string>
#define uint unsigned int

// Defines a y-combinator-style thing to do recursive things. Includes a system where the lambda can declare itself to be obsolete.
// Yes, it's hacky and ugly. Don't worry about it, this is all just testing functionality.
template <class F>
class YCombinator {
public:
    F m_f; // the lambda will be stored here
    bool m_selfDestructing = …
Run Code Online (Sandbox Code Playgroud)

c++ lambda y-combinator visual-studio c++20

5
推荐指数
2
解决办法
141
查看次数

我可以使用该类中的函数删除动态分配的类吗?

我正在为游戏写一个州经理.我已经掌握了大部分逻辑,因为我想要这样做.我希望状态(将是类)在StateManager类的堆栈中处理.每个状态都有暂停功能,堆栈将是STL堆栈.

当状态完成它需要做的事情时(例如:从暂停屏幕,用户点击"返回游戏"),它需要从堆栈中删除并删除.我现在的逻辑(不幸的是我无法测试)是这样的:

州完成其工作.在它的更新函数中,当它发现它完成时,它将调用一个函数来清理状态.此函数将处理需要绑定的任何立即松散的结束(如果有),从状态管理器堆栈调用pop函数,并删除自身.

我要问的是:我可以从内部删除一个类吗?

c++ self-destruction

2
推荐指数
1
解决办法
903
查看次数

什么时候使用"删除这个"是否合适?

可能重复:
对象是否应该在C++中删除自己?

在我的应用程序中,我正在创建许多"拥有自己"的对象 - 在创建它们并告知它们"go"之后,只有对象本身才能确定何时应该删除它.

例如,如果我正在编写游戏,我可能会有多个Enemy对象.只有Enemy对象知道什么时候应该死掉.

结果,我最终delete thisEnemy对象内部使用了一些成员函数.这是不好的形式?这是我应该避免的,如果是这样,处理这种情况的正确方法是什么?

c++ memory-management

1
推荐指数
1
解决办法
540
查看次数