草庐IT

Destructor

全部标签

php - 什么决定了类对象在 PHP 中何时被销毁?

假设我们有类CFoo。在以下示例中,何时调用CFoo::__destruct()?functionMyPHPFunc(){$foo=newCFoo();...//When/where/howdoes$foogetdestroyed/deleted?}在这个例子中,当脚本退出MyPHPFunc的范围时是否会调用析构函数,因为$foo将不再可访问? 最佳答案 在PHP中,所有值都保存在所谓的zval中。那些zval包含实际数据、类型信息和(这对您的问题很重要)引用计数。看看下面的片段:$a=newB;//$apointstozval(n

php - 什么决定了类对象在 PHP 中何时被销毁?

假设我们有类CFoo。在以下示例中,何时调用CFoo::__destruct()?functionMyPHPFunc(){$foo=newCFoo();...//When/where/howdoes$foogetdestroyed/deleted?}在这个例子中,当脚本退出MyPHPFunc的范围时是否会调用析构函数,因为$foo将不再可访问? 最佳答案 在PHP中,所有值都保存在所谓的zval中。那些zval包含实际数据、类型信息和(这对您的问题很重要)引用计数。看看下面的片段:$a=newB;//$apointstozval(n

c++ - 在 int32_t 上调用析构函数是否合法?

我刚刚发现下面的代码不是一个有效的C++(它不在~之后的int处解析):intx=5;x.~int();但是,以下代码段确实有效:int32_tx=5;x.~int32_t();这是因为int32_t在我的特定C++实现中是一个typedef,显然可以在任何typedef的类型上调用析构函数。我的问题是:是否需要任何C++实现才能允许第二个片段进行编译?特别是,int32_t是否保证是typedef,如果编译器知道typedeftypedef将某些内容转换为int,是否需要允许销毁typedef? 最佳答案 明确要求int32_t是

c++ - 在 int32_t 上调用析构函数是否合法?

我刚刚发现下面的代码不是一个有效的C++(它不在~之后的int处解析):intx=5;x.~int();但是,以下代码段确实有效:int32_tx=5;x.~int32_t();这是因为int32_t在我的特定C++实现中是一个typedef,显然可以在任何typedef的类型上调用析构函数。我的问题是:是否需要任何C++实现才能允许第二个片段进行编译?特别是,int32_t是否保证是typedef,如果编译器知道typedeftypedef将某些内容转换为int,是否需要允许销毁typedef? 最佳答案 明确要求int32_t是

c++ - STL 容器是否设计为允许继承?

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:IsitokaytoinheritimplementationfromSTLcontainers,ratherthandelegate?我的问题与Whydon'tSTLcontainershavevirtualdestructors?有关有些人(包括前一个问题的作者)确信没有虚拟dtor意味着类不可继承。我对如此强烈的声明持怀疑态度,因此我询问了来源或一些推理,但大多数受访者保持沉默。也没有人回复我的answer所以我认为质疑前一个问题中的假设并澄清这个重要问题是个好主意。STL容器是否设计为允许继承?更一般地

c++ - STL 容器是否设计为允许继承?

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:IsitokaytoinheritimplementationfromSTLcontainers,ratherthandelegate?我的问题与Whydon'tSTLcontainershavevirtualdestructors?有关有些人(包括前一个问题的作者)确信没有虚拟dtor意味着类不可继承。我对如此强烈的声明持怀疑态度,因此我询问了来源或一些推理,但大多数受访者保持沉默。也没有人回复我的answer所以我认为质疑前一个问题中的假设并澄清这个重要问题是个好主意。STL容器是否设计为允许继承?更一般地

c++ - Cocos2dx内存管理,如何使用析构函数以及何时释放对象?

我正在阅读网络和文档,但老实说,我不明白。由于我是cocos2d-x的新手,我想更好地了解对象是如何创建/保留的,以及我应该如何释放它们(如果需要)。让我感到困惑的是我不太了解的智能指针的使用。想象一下,在我的CCLayer(添加到CCScene)中,我添加了一个CCSprite,所以我这样做了:this->sprite=CCSprite::create("mySprite.png");this->addChild(sprite);那么既然我使用了create()我应该在某个地方发布它吗?也许在CCLayer的析构函数中?还是我与此无关?我知道C++的基础知识,所以如果我“新建”一个对

c++ - Cocos2dx内存管理,如何使用析构函数以及何时释放对象?

我正在阅读网络和文档,但老实说,我不明白。由于我是cocos2d-x的新手,我想更好地了解对象是如何创建/保留的,以及我应该如何释放它们(如果需要)。让我感到困惑的是我不太了解的智能指针的使用。想象一下,在我的CCLayer(添加到CCScene)中,我添加了一个CCSprite,所以我这样做了:this->sprite=CCSprite::create("mySprite.png");this->addChild(sprite);那么既然我使用了create()我应该在某个地方发布它吗?也许在CCLayer的析构函数中?还是我与此无关?我知道C++的基础知识,所以如果我“新建”一个对

c++ - 编写 LinkedList 析构函数?

这是一个有效的LinkedList析构函数吗?我仍然对他们感到困惑。我想确保我理解正确。LinkedList::~LinkedList(){ListNode*ptr;for(ptr=head;head;ptr=head){head=head->nextdeleteptr;}}所以在循环开始时,指针ptr被设置为保存头的地址,即链表中的第一个节点。然后将head设置为下一项,一旦第一次删除发生,它将成为列表的开头。ptr被删除,第一个节点也是如此。在循环的第一次迭代中,指针再次设置为head。我担心的是到达最后一个节点。条件“头”;应该检查它是否不为空,但我不确定它是否会起作用。任何帮助

c++ - 编写 LinkedList 析构函数?

这是一个有效的LinkedList析构函数吗?我仍然对他们感到困惑。我想确保我理解正确。LinkedList::~LinkedList(){ListNode*ptr;for(ptr=head;head;ptr=head){head=head->nextdeleteptr;}}所以在循环开始时,指针ptr被设置为保存头的地址,即链表中的第一个节点。然后将head设置为下一项,一旦第一次删除发生,它将成为列表的开头。ptr被删除,第一个节点也是如此。在循环的第一次迭代中,指针再次设置为head。我担心的是到达最后一个节点。条件“头”;应该检查它是否不为空,但我不确定它是否会起作用。任何帮助