标签: self-destruction

是否允许删除?

是否允许delete this;delete-statement是将在该类实例上执行的最后一个语句?当然,我确信this-pointer所代表的对象是newly-created.

我在考虑这样的事情:

void SomeModule::doStuff()
{
    // in the controller, "this" object of SomeModule is the "current module"
    // now, if I want to switch over to a new Module, eg:

    controller->setWorkingModule(new OtherModule());

    // since the new "OtherModule" object will take the lead, 
    // I want to get rid of this "SomeModule" object:

    delete this;
}
Run Code Online (Sandbox Code Playgroud)

我可以这样做吗?

c++ memory-management new-operator self-destruction delete-operator

225
推荐指数
8
解决办法
10万
查看次数

"删除这个"是否安全?

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

c++ runtime-error self-destruction

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

C#中的自删除应用程序在一个可执行文件中

是否可以在C#中创建一个能够在某些条件下删除自己的应用程序.

我需要为我的应用程序编写更新程序,但我不希望在更新过程后留下可执行文件.

有一个官方的.Net OneClick但由于与我的HTTP服务器有些不兼容以及OneClick本身的一些问题,我不得不自己制作一个.

乔治.

[编辑]更多细节:

我有:Application Executable下载更新程序("补丁",但不完全)这个"补丁"更新应用程序可执行文件本身.

应用程序执行如下:

Application: Start -> Check Version -> Download new Updater -> Start Updater -> exit;
Updater: Start -> do it's work -> start Application Executable -> self delete (this is where I get stuck);
Run Code Online (Sandbox Code Playgroud)

.net c# self-updating self-destruction

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

"删除这个"有什么用?

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

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

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

c++ destructor memory-management self-destruction

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

在构造函数中"删除此"

我执行此代码时实际发生了什么?

class MyClass
{
    MyClass()
    {
        //do something
        delete this;   
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ constructor destructor self-destruction delete-operator

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

对象是否应该在C++中删除自己?

我在C#度过了最近4年,所以我对C++中当前的最佳实践和常见设计模式感兴趣.考虑以下部分示例:

class World
{
public:
    void Add(Object *object);
    void Remove(Object *object);
    void Update();
}

class Fire : Object
{
public:
    virtual void Update()
    {
        if(age > burnTime)
        {
            world.Remove(this);
            delete this;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我们有一个负责管理一组对象并定期更新它们的世界.火是一种可能在许多不同情况下被添加到世界中的物体,但通常是世界上已有的另一物体.Fire是唯一知道什么时候它已经烧毁的对象,所以目前我已将它自行删除.造成火灾的对象可能不再存在或相关.

这是一件明智的事情还是有更好的设计来帮助清理这些物体?

c++ oop memory-management self-destruction resource-cleanup

24
推荐指数
6
解决办法
2万
查看次数

如何让我的.NET应用程序自行擦除?

如何让我的C#app擦除自身(自毁)?以下是我认为可行的两种方式:

  • 提供另一个删除主程序的程序.但是这个删除程序是如何被删除的呢?
  • 创建一个等待几秒钟然后删除文件的CMD进程.在这几秒钟内,您关闭应用程序.

这两种方法似乎效率低下.我觉得有一些内置的标志或Windows中允许这样的东西.我该怎么办?另外,您能提供一些示例代码吗?

更新:感谢您的所有答案!我要去尝试一下,看看能给我带来什么.

首先,有些人问我为什么要我的应用程序这样做.这就是答案:几天前,我读了Joel Spolsky在他的博客上发布的Project Aardvark规范,并提到客户端应用程序会在远程会话后删除自己.我想知道它是如何工作的,以及如果我需要这样做,我可以完成这样的壮举.

以下是对建议内容的一点概述:

  • 创建一个注册表项,告诉Windows在重新启动时删除该文件
  • 使用ping命令启动CMD等待几秒钟然后删除该文件

当然,这些都有其缺点,如评论中所述.

但是,下面概述的这种方法是否有效?

有两个可执行文件:Program.exe和Cleaner.exe.前者是程序本身,后者是删除Program.exe及其自身的应用程序(如果它被加载到内存中,我将要解释).Program.exe(具有依赖关系)是否可以将所有没有任何依赖关系的Cleaner.exe 加载到内存中并运行它?

如果可以,可以将Cleaner.exe打包到Program.exe中,加载到内存中,然后运行?

.net c# windows self-destruction delete-file

23
推荐指数
3
解决办法
1万
查看次数

应该运行一次并删除自身的PHP文件.可能吗?

是否可以创建一个没有错误运行一次的PHP文件并自行删除?

php file self-destruction

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

应该从成员方法中调用"删除此"吗?

我刚刚阅读这篇文章,并希望得到大家的建议:

问:应该delete this;从成员方法中调用吗?

c++ self-destruction

20
推荐指数
5
解决办法
1983
查看次数

自毁应用程序

沿着"这条磁带将在五秒内自毁.好运,吉姆" ......

一旦达到预设的使用时间或其他条件,应用程序是否可以删除自身(或者它的可执行包装形式)?

或者,可以使用哪些其他方法使应用程序无用?

这里的目标是让测试版过期,邀请用户获得更新版本.

java desktop-application self-destruction

15
推荐指数
2
解决办法
9040
查看次数