是否允许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
在我最初的基本测试中,这样做是完全安全的.然而,它已经让我吃惊试图操纵this该功能后delete小号this可能是一个运行时错误.这是真的,通常是安全的delete this吗?或者只有某些安全的情况?
是否可以在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) 今天,我看到了一些遗留代码.在析构函数中有一个类似" delete this" 的语句.我想,这个调用将是递归的.它为什么有效?
我在Y!上做了一些快速搜索,我发现如果需要限制用户创建堆栈对象,我们可以将析构函数设为私有,并提供删除实例的接口.在提供的接口中,我们必须在此指针上调用delete.
是否还有其他使用此类陈述的情况?
我执行此代码时实际发生了什么?
class MyClass
{
MyClass()
{
//do something
delete this;
}
}
Run Code Online (Sandbox Code Playgroud) 我在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#app擦除自身(自毁)?以下是我认为可行的两种方式:
这两种方法似乎效率低下.我觉得有一些内置的标志或Windows中允许这样的东西.我该怎么办?另外,您能提供一些示例代码吗?
更新:感谢您的所有答案!我要去尝试一下,看看能给我带来什么.
首先,有些人问我为什么要我的应用程序这样做.这就是答案:几天前,我读了Joel Spolsky在他的博客上发布的Project Aardvark规范,并提到客户端应用程序会在远程会话后删除自己.我想知道它是如何工作的,以及如果我需要这样做,我可以完成这样的壮举.
以下是对建议内容的一点概述:
当然,这些都有其缺点,如评论中所述.
但是,下面概述的这种方法是否有效?
有两个可执行文件:Program.exe和Cleaner.exe.前者是程序本身,后者是删除Program.exe及其自身的应用程序(如果它被加载到内存中,我将要解释).Program.exe(具有依赖关系)是否可以将所有没有任何依赖关系的Cleaner.exe 加载到内存中并运行它?
如果可以,可以将Cleaner.exe打包到Program.exe中,加载到内存中,然后运行?
我刚刚阅读这篇文章,并希望得到大家的建议:
问:应该delete this;从成员方法中调用吗?
沿着"这条磁带将在五秒内自毁.好运,吉姆" ......
一旦达到预设的使用时间或其他条件,应用程序是否可以删除自身(或者它的可执行包装形式)?
或者,可以使用哪些其他方法使应用程序无用?
这里的目标是让测试版过期,邀请用户获得更新版本.
self-destruction ×10
c++ ×6
.net ×2
c# ×2
destructor ×2
constructor ×1
delete-file ×1
file ×1
java ×1
new-operator ×1
oop ×1
php ×1
windows ×1