当抛出异常时,是否可以防止执行析构函数?
基本上,我的构造函数目前被设置为将一些信息保存到文件中。然而,即使当我抛出一个错误时,当我假设php将停止和停止在一起时,也会发生这种情况。
示例:
<?php
class Test {
function __construct() {
echo "constructor";
}
function __destruct() {
echo "destructor";
}
function Hello() {
echo "
我有这段代码来呈现一个模板(我是PHP新手,所以请耐心等待)
function __destruct()
{
/*
* It's render the template
*
*/
$this->_template->render();
}
出现以下错误:
Fatal error: Call to a member function render() on a non-object in /opt/lampp/htdocs/soap/php/library/control
析构函数会自动执行,而无需取消设置变量。
<?php
class cars
{
public static $count=0;
public function __construct($type, $year)
{
$this->type= $type;
$this->year= $year;
cars::$count++;
return true;
}
public function __destruct()
{
echo "The " . $this->type .
我是php的新手,所以我需要你的一些建议。这是我写的一个简单的类。
class Logger
{
private $handle;
public function readFile($filename)
{
$this->handle = fopen($filename, 'a+');
}
public function writeFile($strData)
{
fwrite($this->handle, $strData);
}
public function
我正在尝试理解php的构造函数和析构函数的行为。对于构造函数,一切都按预期进行,但我在让析构函数隐式触发时遇到了问题。我已经在php.net和相关网站上阅读了所有的资料,但我找不到这个问题的答案。
如果我有一个简单的类,如下所示:
class test{
public function __construct(){
print "contructing<br>";
}
public function __destruct(){
print "destroying<br>
我正在努力学习PHP面向对象的编程,但在视频教程中,我得到了一个错误,而教程主持人没有相同的问题!
PHP代码:
<?php
class Player {
public $score = 10;
public $name = "";
public function __construct($score,$name) {
$this->score = $score;
$this->name = $name;
}
public function __destruct() {
echo "Object With Name
我试着理解在退出范围时析构函数调用的顺序。假设我有以下代码:
class Parent{
Parent(){cout<<"parent c called \n";}
~Parent(){cout<< "parent d called \n";}
};
class Child: public parent{
Child(){cout<< "child c called \n";}
~Child(){cout<<"child d called\n";}
};
现在,我知道子构造函数
我对虚拟析构函数感到困惑。我读了很多问题和解释,但我仍然不明白,如果基类有一个派生类,即使它没有任何特殊操作,我也需要实现它自己的析构函数。
编译器会编译下面的代码,但是会不会有任何内存泄漏或任何问题?
Class Base{
public:
virtual ~Base(){}
};
Class Derived : public Base{
// do i need a special destructor here for Derived ?
}
Base *foo;
foo = new Derived;
delete foo;
我读到析构函数不能共享,这是真的吗?
我有一个带有几个子类的基类,这些子类的析构函数不会改变。这将导致一些重复的代码。
可以共享析构函数吗?如果没有,我该如何避免这些析构函数中的重复代码呢?
Class A{
public:
~A() {
//do something
}
};
class B: public A{
};
class C: public A{
};
class D: public A{
};
现在,我希望B、C和D具有与A相同的析构函数。
我使用g++ -Wall -Werror *.cpp编译并获得错误:
ConcreteCharArray.h:21:15: error: declaration of ‘~CharArray’ as member of ‘ConcreteCharArray’
具体执行情况:
class ConcreteCharArray: public CharArray
{
private:
char * charArray;
public:
~CharArray() {
delete[] string;
}
};
虚拟课程:
class CharArray
{
public
我在__destruct()方法中有一些代码,有时会抛出异常。__destruct()方法在另一个异常期间被调用,我看到一个模糊的错误:
PHP Fatal error: Ignoring exception from exampleClass::__destruct() while an exception is already active
它隐藏了被调用的实际异常。我想做一些类似的事情:
public function __destruct()
{
try
{
// do work here
}
catch(Exception $e)
{
// c
请考虑以下几点
class base{
base();
~base();
}:
class derived : public base{
};
当派生对象被析构并且派生类没有定义析构函数时,是否会自动调用基类析构函数?
否则,如果我在派生类中也有析构函数,我是否也需要显式调用基类析构函数?
class base{
base();
~base();
}:
class derived : public base{
derived();
~derived
base::~base(); //do I need this?
假设我有:
class Base {
public:
virtual ~Base() = 0;
}
class Derived: public Base {
public:
~Derived();
}
在我的代码中,我需要通过一个Derived指针删除Base类,如下所示:
delete[] pt_base;
但是,在已实现的析构函数中,我实际上没有任何要销毁的东西。但我仍然需要他们通过基类删除?
在不浪费大量代码和空析构函数的情况下,实现我想要的东西的最佳方法是什么?
当一个类的dtor为空时,当它自己的dtor从联合中显式调用时,它会调用成员的dtor吗?
这是一种困难的文字,希望伪代码是更直接的。在本例中,Texture::~Texture()是否会隐式调用source.bitmap.pixels.~vector()?
struct Bitmap{
~Bitmap(){} // empty dtor
// members
std::vector<uint8> pixels; // <-- will this dealloc when ~Bitmap() is called manually?
};
stru
我有一个存储在PHP数组中的客户端类对象数组。有时,我需要在数组中unset()其中一个对象,而不必担心显式地关闭套接字连接。我希望__destruct()能为我做到这一点。
class A{
private $id;
public function __construct( $id ){
$this->id = $id;
}
public function __destruct(){
echo "Calling destruct on " . $this->id . ".\n";
我正在从0开始新的论坛项目,我想添加一个很好的方法和.首先:我试图在类中调用文件的类,我的意思是:我有一个文件class.php,main.php和index.php,在class.php中,我创建了类,在main.php中,我创建了auther类main,在使用像类一样的函数之后,我在class.php中包含了.
class.php:
<?PHP
class test{
function hello(){ echo "Hello World !"; }
}
?>
ma
根据准则:
如果需要默认析构函数,但其生成已被抑制(例如,通过定义移动构造函数),则使用=default。
我无法想象在类中,如果没有显式默认析构函数,代码什么时候会出现错误,而类中有移动构造函数。
有人能给我举个例子证实上面的话吗?
struct S {
S() {};
S( S&& ) {}; // move ctor
};
int main() {
S s; // there is no need to declare dtor explicitly =default
}
为什么在下面的例子中都调用了析构函数,~D(),~C(),~B(),~A()?
只有一个虚拟析构函数:A的那个。
代码如下:
#include<iostream>
using namespace std;
class A
{
public:
virtual ~A()
{
cout<<"destruct A\n";
}
};
class B:public A
{
public:
~B()
{
cout<<"destruct B\n";
}
};
class C:public B
{
pu
如果我有以下课程:
class Small {
public:
Small();
Small(const Small &small);
~Small();
private:
int *arr;
};
和
class Big {
public:
Big();
Big(const Big &big);
~Big();
private:
char *name;
Small smallObject;
};
当我调用~Big()时,我会删除分配给name成员的动态内存,但是smallObject也使用动态内存,这是我
得到一些错误,认为它是一个带有非虚拟析构函数的虚拟函数。如何修复此错误?它在g++ 4.6.x中工作,但我需要它在旧版本的g++上工作。:(
#include <list>
template <typename T>
class container{
public:
~queue(){
queuel.clear();
queuel.~list();
}
virtual T func_x(){
T temp;
//do stuff with list<t> test
考虑一个简单的接口/实现设计:
class Base
{
public:
virtual ~Base()
{
// Virtual empty destructor
}
};
class Derived : public Base
{
public:
virtual ~Derived()
{
// Lots of clean up code here
// ...
}
};
使用此设计,我理解以下代码是安全和有效的:
Base* base = new Derived();
delete bas
我有一个struct O,用第三方代码定义。因为它是C代码,所以它不定义virtual destructor。(在我的例子中,它是来自OVERLAPPED struct的win32 appi)。
我正在修改的客户代码有一个class S,它来自class A,来自struct O。
struct O{};
class A : public O{};
class S : public A{};
他们中没有人将其析构函数声明为virtual。
如果在指向delete的指针上调用O,则会出现泄漏。好的。
但是,如果我曾经在指向S的指针上调用delete,那么delete标准会指出什么呢?它是否会自动
我用的是gcc。我知道当我们销毁基类指针指向的派生类对象时,虚析构函数是如何解决这个问题的。我想知道它们是如何工作的?
class A
{
public:
A(){cout<<"A constructor"<<endl;}
~A(){cout<<"A destructor"<<endl;}
};
class B:public A
{
public:
B(){cout<<"B constructor"<<endl;}