是否有可能制作一个python脚本,在Windows中执行(自删除)时删除.py文件?
我有一个表单,用于显示一些信息几秒钟.表单可以自由释放吗?我可以在构造函数中启动一个计时器,然后在timer-event中调用self.free吗?或者这可能会导致麻烦吗?
即使在遇到要删除自身的语句之后,bash脚本如何执行?例如,当我运行test.sh脚本时,该脚本具有以下特征:
<--some commands-->
rm test.sh
<--some more commands-->
end
Run Code Online (Sandbox Code Playgroud)
脚本在删除之前执行到结束
以下使用MSVC9.0编译的代码运行并输出Destructor四次,这是合乎逻辑的.
#include <iostream>
class SomeClass
{
public:
void CommitSuicide()
{
delete this;
}
void Reincarnate()
{
this->~SomeClass();
new (this) SomeClass;
}
~SomeClass()
{
std::cout << "Destructor\n";
}
};
int main()
{
SomeClass* p = new SomeClass;
p->CommitSuicide();
p = new SomeClass;
p->Reincarnate();
p->~SomeClass(); //line 5
p->CommitSuicide();
}
Run Code Online (Sandbox Code Playgroud)
我认为main中的前4行代码不会导致未定义的行为(尽管不完全确定delete this;).我想要确认或<占位符确认的反义词>.但我对第5行和第6行有严重怀疑.允许显式调用析构函数,不是吗?但在此之后,对象的生命周期是否已经完成?也就是说,在析构函数的显式调用允许(定义)后调用另一个成员?
总而言之,上述代码的哪些部分(如果有的话)会导致未定义的行为(从技术上讲)?
是否可以在C中编写一个程序,在执行时删除自身(二进制文件)然后成功终止.如果是这样,最简单的方法是什么?
我正在编写一个链表,我想要一个struct的析构函数(一个Node结构)来简单地删除它自己,并且没有任何副作用.我希望我的列表的析构函数迭代地自己调用Node析构函数(临时存储下一个节点),如下所示:
//my list class has first and last pointers
//and my nodes each have a pointer to the previous and next
//node
DoublyLinkedList::~DoublyLinkedList
{
Node *temp = first();
while (temp->next() != NULL)
{
delete temp;
temp = temp->next();
}
}
Run Code Online (Sandbox Code Playgroud)
所以这将是我的Node析构函数:
Node::~Node
{
delete this;
}
Run Code Online (Sandbox Code Playgroud)
这是否可以接受,特别是在这种情况下?
在这个答案中,Ryan直接调用虚拟析构函数.我已经在VS2010中测试了代码,它正确地调用了所有析构函数(使用日志记录语句测试).这样做真的有效吗?这种方法有哪些问题,缺陷甚至是好处?
我只能将它视为真正强制重置实际类型的一种方法,即使它们不覆盖虚reset函数,因为它们至少必须在它们的析构函数中清理.
另外,对析构函数的调用会带来什么样的副作用呢?在这样的析构函数调用之后使用该对象是不确定的行为?如果一个人立即通过new (this) MyClass();电话重新初始化该怎么办?
我发现这个 repo 描述了如何销毁 service worker。但是我没有找到任何描述工人何时应该销毁/卸载/取消注册自己的资源。
当我开发网站时,我经常使用端口 8080。我可以在有 Service Worker 的站点 X 上工作,然后在没有 Service Worker 的站点 Y 上工作,但原来的和现在不正确的 Service Worker 仍然存在。
Service Worker 决定自行卸载的逻辑有点棘手,因为我们想要:
是否有围绕此的标准机制或约定?
javascript offline self-destruction service-worker progressive-web-apps
我有这个功能,可以即时创建DIV.但现在,我想在onclick事件中销毁这个对象,但我只是不知道如何.
function creatediv(id) {
var newdiv = document.createElement('div');
newdiv.setAttribute('id', id);
newdiv.onclick=function(){this=null;}; //bad function
document.body.appendChild(newdiv);
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
谢谢
假设有一个Items 向量
vector<Item*> items; //{item1, item2, item3}
Run Code Online (Sandbox Code Playgroud)
然后,在代码的其他部分,
items[1]->suicide();
Run Code Online (Sandbox Code Playgroud)
其中suicide函数为:
void Item::suicide()
{
delete this;
}
Run Code Online (Sandbox Code Playgroud)
什么是items矢量大小以及它现在的排列方式?这是好做呢?
编辑(我可以问一个额外的问题吗?):如果输出的所需排列是{item1, item3},大小是2,并且没有悬空指针,如何以自毁方式(从它item2自身)进行?
编辑2:谢谢你的所有答案!真棒.所以我最终决定并找到了从对象外部做到这一点的方法,因为这是一种不好的做法而且不必要地复杂化
self-destruction ×10
c++ ×4
destructor ×2
javascript ×2
bash ×1
c ×1
delphi ×1
dom ×1
linked-list ×1
object ×1
offline ×1
python ×1
this ×1
vector ×1
windows ×1