Tag: 构造函数

谁删除在“新”操作期间分配的内存,在构造函数中有exception?

我真的不敢相信我找不到明确的答案 如何释放在C ++类构造函数抛出exception后分配的内存,在使用new运算符初始化的情况下。 例如: class Blah { public: Blah() { throw "oops"; } }; void main() { Blah* b = NULL; try { b = new Blah(); } catch (…) { // What now? } } 当我尝试了这一点, b在catch块中是NULL(这是有道理的)。 在debugging的时候,我注意到conrol在进入构造函数前进入内存分配例程。 这在MSDN网站上似乎证实了这一点 : 当使用new为C ++类对象分配内存时,将在分配内存后调用该对象的构造函数。 所以,请记住,局部variablesb从来没有被分配(即在catch块中是NULL),你如何删除分配的内存? 在这个问题上得到一个跨平台的答案也是很好的。 即C ++规范说什么? 澄清:我不是在谈论这个类在c'tor中分配内存然后抛出的情况。 我明白,在这种情况下,决不会被召唤。 我正在讨论用于分配对象的内存(在我的例子中是Blah )。

OOPinheritance和默认构造函数

假设有一个基类A和一个从B派生的类B 然后,我们知道类A的构造函数永远不会被类Binheritance。 但是,当创buildB的新对象时,则在调用B类的默认/自定义构造函数之前调用类A的默认构造函数。 也许这样做的目的是类A的字段需要被初始化为默认值。 现在,假设类A定义了一个自定义的构造函数。 这意味着类A的默认构造函数被编译器自动删除。 现在,创build一个B类的新实例,在调用类B的构造函数之前,会自动调用A类的构造函数? (在这种情况下, A类字段是如何初始化的?)

在类的构造函数中返回一个值

到目前为止,我有一个PHP类的构造函数 public function __construct ($identifier = NULL) { // Return me. if ( $identifier != NULL ) { $this->emailAddress = $identifier; if ($this->loadUser() ) return $this; else { // registered user requested , but not found ! return false; } } loadUser的function是查找特定电子邮件地址的数据库。 当我设置标识符到一些电子邮件,我敢肯定它不在数据库中; 第一个IF被通过,并且进入第一个ELSE。 这里的构造函数应该返回FALSE; 但相反,它将返回具有所有NULL值的类的对象! 我如何防止这个? 谢谢 编辑: 谢谢大家的答案。 这相当快! 我看到OOP的方式是抛出一个exception。 所以抛出一个,我的问题改变,我应该怎么做的exception? php.net的手册很混乱! // […]

带有参数的基类构造函数的inheritance

简单的代码: class foo { private int a; private int b; public foo(int x, int y) { a = x; b = y; } } class bar : foo { private int c; public bar(int a, int b) { c = a * b; } } Visual Studio抱怨“酒吧”的构造函数: 错误CS7036没有给出的参数对应于'foo.foo(int,int)'所需的forms参数'x'。 什么??

C#中的静态构造函数

我想要使​​用像下面这样的静态构造函数: public static DataManager() { LastInfoID = 1; } 并得到这个错误: 静态构造函数不允许访问修饰符 我想知道我的问题是什么。

默认的Move构造函数是否定义为noexcept?

看起来,一个向量将检查移动构造函数是否被标记为noexcept,然后决定在重新分配时是移动还是复制元素。 默认的移动构造函数是否定义为noexcept? 我看到下面的文档,但没有指定这个。 http://en.cppreference.com/w/cpp/language/move_constructor 隐式声明的移动构造函数 如果没有为类types(结构体,类或联合体)提供用户定义的移动构造函数,并且以下所有条件都成立:没有用户声明的复制构造函数,则没有用户声明的复制赋值运算符用户声明的移动赋值运算符没有用户声明的析构函数隐式声明的移动构造函数未被定义为删除由于下一节中详细说明的条件,那么编译器将声明一个移动构造函数作为它的类的内联公共成员签名T :: T(T &&)一个类可以有多个移动构造函数,例如T :: T(const T &&)和T :: T(T &&)。 如果存在一些用户定义的移动构造函数,则用户仍然可以强制生成隐式声明的移动构造函数,其关键字为default。

Scala类的构造函数参数

有什么区别: class Person(name: String, age: Int) { def say = "My name is " + name + ", age " + age } 和 class Person(val name: String, val age: Int) { def say = "My name is " + name + ", age " + age } 我可以将参数声明为var s,稍后更改它们的值吗? 例如, class Person(var name: String, […]

有没有办法实例化一个类而不调用__init__?

有没有办法绕过python类的构造函数__init__ ? 例: class A(object): def __init__(self): print "FAILURE" def Print(self): print "YEHAA" 现在我想创build一个A的实例。 它可能看起来像这样,但是这个语法是不正确的。 a = A a.Print() 编辑: 一个更复杂的例子: 假设我有一个对象C ,目的是存储一个单一的参数,并用它做一些计算。 然而,这个参数并没有被传递,而是被embedded到一个巨大的参数文件中。 它可能看起来像这样: class C(object): def __init__(self, ParameterFile): self._Parameter = self._ExtractParamterFile(ParameterFile) def _ExtractParamterFile(self, ParameterFile): #does some complex magic to extract the right parameter return the_extracted_parameter 现在我想转储并加载该对象C一个实例。 然而,当我加载这个对象时,我只有一个variablesself._Parameter ,我不能调用构造函数,因为它期望参数文件。 @staticmethod def Load(file): f = […]

为什么其他方法可以是“静态”,但构造函数不能?

我不明白为什么主要的方法必须是静态的。 我理解静态variables,但静态方法很难掌握。 是否存在静态方法,以便可以在两个不同的类中创build具有相同名称的两个方法,而不会相互冲突? 另外,我不明白为什么我不能创build一个静态构造函数。 谁能帮助解释这个概念?

用私有构造函数扩展类

假设我们有以下代码: class Test { private Test() { System.out.println("test"); } } public class One extends Test { One() { System.out.println("One"); } public static void main(String args[]) { new One(); } } 当我们创build一个对象One ,它最初被称为父类构造函数Test() 。 但作为Test()是私人的 – 我们得到一个错误。 多less是一个很好的例子和出路这种情况?