constructor相关内容
类构造函数的初始化器的顺序是否很重要? 所以说我有: class MyClass:BaseClass { int a,b,c; public: MyClass(int); } 1: MyClass :: MyClass(int forBase): a(7), b(14), c(28), BaseClass(forBase){}
..
我正在浏览这篇文章 注意:如果一个构造函数抛出一个异常结束,与对象本身相关联的内存 将被清除 - 是没有内存 泄漏。例如: void f() { X x ; //如果X :: X()抛出,x本身的内存不会泄露 Y * p = new Y(); //如果Y :: Y()throws,* p本身的内存不会泄露 } $ b b 我很难理解这一点,如果有人能够澄清这一
..
给定一个抽象接口和从该接口派生的实现,其中构造函数被保护(创建这些对象只能从类工厂获得 - 实现DI模式),如何在工厂函数中使用make_shared ? 例如: class IInterface { public: virtual void Method()= 0; }; class InterfaceImpl:public IInterface { pu
..
就像在标题中,你如何从派生类复制构造函数调用基类复制构造函数? 解决方案 您可以在初始化列表中指定基本初始化: Derived :: Derived(const Derived& other):Base(other) {/ * ... * /} pre>
..
我使用没有任何复制操作符的类(对象):它基本上不能被复制现在。我有一个 std :: map objects 变量,用于列出带有int标识符的对象。我如何添加一个对象到这个地图,而不必使用复制操作符? 我尝试过 objects.insert(std :: pair); 但不会编译。我只是想使用默认构造函数在地图中创建我的
..
我的印象是,这是不可能的,例如: 但是下面的程序运行并产生两行“Constructor Person”: #include class Person { public: Person() { std :: cout
..
如果有标准和复制构造函数的类 class Ex { //构造函数定义 } 和一个以参数为参数的函数 void F(Ex _exin){...} 采取以下代码: Ex A; F(A); // F的参数是从A F(Ex())拷贝构造的; // F的参数使用默认构造函数 在第三行我传递给 F 使用默认构造函数创建
..
可能重复: C ++的“位置新建” C ++? Datatype * x = new(y)Datatype(); 解决方案 它允许你提供数据将被分配的内存,而不用 new 操作符分配它。例如: Foo * f = new Foo 以上将为您分配内存。 void * fm = malloc(sizeof(Foo)); Foo * f
..
请注意,这是关于构造函数的问题,而不是关于处理时间的类的问题。 假设我有一个类: class Time { protected: unsigned int m_hur; unsigned int m_minute; unsigned int m_second; public: 时间(unsigned int hour,unsigned int minute,uns
..
我知道构造函数不会“返回”任何东西,但例如如果我调用 CMyClass * object = new CMyClass()有任何方法使对象为NULL如果构造函数失败?在我的情况下,我有一些图像必须加载,如果文件读取失败,我想它返回null。有什么办法吗? 提前感谢。 解决方案 我同意其他人你应该使用异常,但如果你真的需要使用NULL为某种原因,使构造函数私有和使用工厂方法:
..
代码如下: 代码: #include using namespace std; class Animal { int a; public: Animal(int a):a(a){} int geta(){return a;} }; class Bird:virtual public Animal { string b;
..
我的问题是构造函数返回什么?这个问题与“什么是构造函数的返回类型是什么? 我在某处读到一个构造函数返回一个完整的对象隐式(即隐式返回类型是类的名称),但不应明确指定。 struct empty {}; int main(){ empty(); //创建一个临时的,隐式的构造函数叫做 } 隐式返回类型应该是类的名称,在这种情况下 empty 。 解决方案
..
由于我的一些代码需要在不同类型的矩阵之间进行隐式转换(例如 Matrix 到 Matrix ),我定义了一个模板化的复制构造函数 Matrix :: Matrix(Matrix const&),而不是标准的 ; T> :: Matrix(Matrix const&): T> class Matrix { public: // ... tem
..
在模板元编程中,可以在返回类型上使用SFINAE来选择某个模板成员函数,例如 template struct A { int sum()const noexcept {return _sum(); } private: int _data [N]; template typename std :: enable_if
..
假设我有一个模板,它由类类型和多个参数类型参数化。匹配这些类型的一组参数存储在元组中。如何将这些传递给类类型的构造函数? 在几乎C ++ 11代码中: template struct foo { tuple args; T gen(){return T(get(args),get(a
..
在Java中,序列化对象非常容易。在C ++中,只有安全(?)到 memcpy 对象,只要它们像C structs(没有多态)。在C ++中,如果编译器能够生成默认(琐碎)复制构造函数,那么为什么它不能生成自动序列化的代码? 在Java中,只有静态函数和数据成员可以从ctor访问。在C ++中,我可以很高兴地使用来自ctor的非静态成员和函数。 在Java中,我可以初始化数据成员班上。
..
这个问题是基于在GCC-4.6上适用于我的代码,但不是在C ++ 0x模式下的另一个使用CLang-3.0的用户。 template struct MyBase { // protected: T m; template MyBase(Args& ... x):m(std :: forward
..
在广泛阅读 ISO / IEC 14882,编程语言 - C ++ 我仍然不确定为什么 const 需要隐式转换为具有单个参数构造函数的用户定义类型,如下所示 #include class X { public: X(int value){ printf(“constructor initialized with%i”,value); } }
..
所以,C ++标准要求类成员按照它们在类中声明的顺序来初始化,而不是在任何构造函数的初始化器列表中提及它们的顺序。然而,这并不意味着对这些初始化的参数进行求值的顺序。我正在使用一个系统,它经常传递对序列化对象的引用,并想知道我是否可以确保从正确的顺序读取它的位,独立于这些位写入对象的字段的顺序。 p> struct Foo { int a; double b; //我想能够这样做
..
来自C的背景,我一直假设POD类型(例如int)永远不会自动零初始化在C + +,但似乎这是完全错误! 我的理解是,只有'裸体'非静态POD值不会得到零填充,如代码片段所示。我有没有错,还有其他重要的情况,我错过了吗? static int a; struct Foo {int a;}; void test() { int b; Foo f; int *
..