草庐IT

CONSTRUCTOR

全部标签

c++ - 将对象添加到 std::list 时调用对象的析构函数

我有一个Foo对象和一个std::list保存它的实例。我的问题是,当我向列表中添加一个新实例时,它首先调用ctor,然后调用dtor。然后是另一个实例上的dtor(根据this指针)。单个实例已添加到列表中,但由于调用了它的dtor(及其父实例),因此无法按预期使用该对象。下面是一些简化的代码来说明问题:#include#includeclassFoo{public:Foo(){intbreakpoint=0;}~Foo(){intbreakpoint=0;}};intmain(){std::listli;li.push_back(Foo());} 最佳答

c++ - constexpr 类的设计 : merging constexpr and non-constexpr versions?

考虑一个在运行时只包装一个值的类:templateclassNonConstValue{public:NonConstValue(constType&val):_value(val){;}Typeget()const{return_value;}voidset(constType&val)const{_value=val;}protected:Type_value;};以及它的constexpr版本:templateclassConstValue{public:constexprConstValue(constType&val):_value(val){;}constexprTypeg

C++ 模板默认构造函数

我在使用模板时遇到了一点问题:templateTFunc(){std::stringsomestr="";//somestr=...if(somestr!=""){returnboost::lexical_cast(somestr);}else{Tret;//warning:"retmaybeuninitializedinthisfunction"returnret;}}如果这个函数无法得到结果,我想返回一个有效的对象,但尽可能为空。如果我像上面那样做,我会收到警告“ret可能在此函数中未初始化”。Try-Catch无助于删除警告..有没有像C#中的default关键字那样的方法?re

c++ - 从子类的构造函数体调用基类的构造函数

我的印象是这是不可能的,例如:CallingtheconstructorofthebaseclassaftersomeotherinstructionsinC++但是下面的程序运行并产生了两行“ConstructorPerson”:#includeclassPerson{public:Person(){std::cout第一个是默认构造函数的隐式调用,很清楚。第二个怎么样-这是否意味着标题中描述的行为是合法的?我使用VisualC++2010。 最佳答案 子类构造函数内部的调用不是调用基类构造函数,它是创建一个临时的、未命名的、类型

gcc 4.8.1 : list-initialization for copy constructor doesn't work 中的 C++11

我鼓励这个问题:如果我有classA{public:};intmain(){Aa{};Ab{a};}gcc给出:moves.cc:Infunction‘intmain()’:moves.cc:15:7:error:toomanyinitializersfor‘A’Ab{a};但是当我使用Ab(a)而不是Ab{a}时,所有编译都正确。如果我声明默认构造函数,它也会编译。为什么会这样? 最佳答案 该类是一个聚合,因此列表初始化将执行聚合初始化,并且不会考虑隐式声明的构造函数。因为没有数据成员,所以只有空列表可以是有效的聚合初始化器。Bu

c++ - 我应该使用初始化列表还是在我的 C++ 构造函数中执行赋值?

classNode{public:Node*parent;//usedduringthesearchtorecordtheparentofsuccessornodesNode*child;//usedafterthesearchfortheapplicationtoviewthesearchinreversefloatg;//costofthisnode+it'spredecessorsfloath;//heuristicestimateofdistancetogoalfloatf;//sumofcumulativecostofpredecessorsandselfandheurist

c++ - 您可以在 C++ 中显式调用实例化的对象类构造函数吗?

创建类的实例后,我们可以显式调用构造函数吗?例如classA{A(inta){}}Ainstance;instance.A(2);我们能做到吗? 最佳答案 您可以使用placementnew,这允许new(&instance)A(2);但是,根据您的示例,您将两次调用一个对象的构造函数,这是非常糟糕的做法。相反,我建议您这样做Ainstance(2);Placementnew通常仅在需要预分配内存(例如在自定义内存管理器中)并稍后构造对象时使用。 关于c++-您可以在C++中显式调用实例

c++ - 为什么 gcc 允许 const 对象没有用户声明的默认构造函数但不允许 clang?

最近Whydoesaconstobjectrequiresauser-provideddefaultconstructor?被标记为WhydoesC++requireauser-provideddefaultconstructortodefault-constructaconstobject?的拷贝.我正在使用coliru和rextexter测试不同版本的gcc(g++-4.7、g++-4.8、g++-4.9)和clang(3.4和3.5),看看新版本的编译器是否引入了这种行为。这里我们有两个测试用例,分别来自两个问题:classA{public:voidf(){}};intmain(

C++:对象和外部函数的生命周期

假设我想调用对象的外部函数来在主体构造函数内部执行一些检查。由于对象的生命周期从构造函数的主体完成执行开始,这是一个不安全的设计吗?structA;voidcheck(Aconst&){/**/}structA{A(){check(*this);}};我的意思是,我正在调用一个尚未激活的对象的外部函数。这是未定义的行为吗?相关问题:如果我将该检查函数作为成员函数(静态或非静态),标准对在构造函数外部但在类内部使用非事件对象有何规定?类和它的用户的观点之间的生命周期概念有什么区别(一种类内和类外生命周期)? 最佳答案 A的生命周期不会

c++ - noexcept 究竟包含什么构造函数?

根据C++标准,类构造函数上的noexceptnoexcept-specification究竟适用于什么?函数体?在可选的ctor-initializer中初始化成员?在可选的mem-initializer中初始化基类?在可选的mem-initializer中初始化类成员?复合语句?函数尝试block?未在ctor-initializer中初始化对象基类的初始化?未在ctor-initializer中初始化对象类成员的初始化?还有什么吗?换句话说,noexceptnoexcept-specification包含以上哪些内容(即触发std::terminate()时如果noexcept(