ctor-initializer

What does a colon following a C++ constructor name do?

What does the colon operator (":") do in this constructor? Is it equivalent to MyClass(m_classID = -1, m_userdata = 0);? class MyClass { public: MyClass() : m_classID(-1), m_userdata(0) { } int m_classID; void *m_userdata; }; ...

How to initialize a const field in constructor?

Imagine I have a C++ class Foo and a class Bar which has to be created with a constructor in which a Foo pointer is passed, and this pointer is meant to remain immutable in the Bar instance lifecycle. What is the correct way of doing it? In fact, I thought I could write like the code below but it does not compile.. class Foo; class ...

What is this weird colon-member syntax in the constructor?

Recently I've seen an example like the following: #include <iostream> class Foo { public: int bar; Foo(int num): bar(num) {}; }; int main(void) { std::cout << (new Foo(42))->bar << std::endl; return 0; } What does this strange : bar(num) mean? It somehow seems to initialize the member variable but I've never seen this syntax...

Initializing members with members

This is a problem I come across often. The following examples illustrates it: struct A { int m_SomeNumber; }; struct B { B( A & RequiredObject ); private: A & m_RequiredObject; }; struct C { C( ); private: A m_ObjectA; B m_ObjectB; }; The implementation of the constructor of C looks something like this: C::C...

Variables after the colon in a constructor

I am still learning C++ and trying to understand it. I was looking through some code and saw: point3(float X, float Y, floatZ) : x(X), y(Y), z(Z) // <----- what is this used for { } What is the meaning of the "x(X), y(Y), z(Z)" sitting beside the constructor's parameters? ...

Simple constructor with initializer list?

Below I've included my h file, and my problem is that the compiler is not liking my simple exception class's constructor's with initializer lists. It also is saying that string is undeclared identifier, even though I have #include <string> at the top of the h file. Do you see something I am doing wrong? For further explanation, this is o...

Properties declared beside the constructor

I am very very new to C/C++ and not sure what the method is called. But thats why I am here trying to find the answer. let me show you an example MyClass::MyClass() : valueOne(1), valueTwo(2) { //code } Where valueOne and valueTwo are class properties that are assigned values outside of the body, what method is this called and w...

Throw exception from constructor initializer

What is the best way to throw exception from the constructor initializer? For example: class C { T0 t0; // can be either valid or invalid, but does not throw directly T1 t1; // heavy object, do not construct if t0 is invalid, by throwing before C(int n) : t0(n), // throw exception if t0(n) is not valid t1() {} }; I t...

Only static and const varibles can be assign to a class?

I am learning C++. Just curious, can only static and constant varibles be assigned a value from within the class declaration? Is this mainly why when you assign values to normal members, they have a special way doing it void myClass::Init() : member1(0), member2(1) { } ...

Is it standard C++ to assign a member pointer to the address of another member in the constructor initializer?

Does this conform to the standard? class Foo { Bar m_bar; Bar * m_woo; public: Foo() : m_bar(42, 123), m_woo(&m_bar) { } }; ...

Using member functions of members in the constructor initializer

I've run into the following a few times with initializer lists and I've never been able to explain it well. Can anyone explain why exactly the following fails (I don't have a compiler to catch typos, so bear with me): class Foo { public: Foo( int i ) : m_i( i ) {} //works with no problem int getInt() {return m_i;} ~Foo() {} ...

Does a const reference prolong the life of a temporary?

Why does this: #include <string> #include <iostream> using namespace std; class Sandbox { public: Sandbox(const string& n) : member(n) {} const string& member; }; int main() { Sandbox sandbox(string("four")); cout << "The answer is: " << sandbox.member << endl; return 0; } Give output of: The answer is: Ins...

Are empty initializers preferred for default initializing integral members?

I just read a comment by GMan that class A { public: A() : m_ptr() // m_ptr is implicitly initialized to NULL { } }; should be preferred over class A { public: A() : m_ptr(NULL) // m_ptr is explicitly initialized to NULL { } }; Notice the lack of NULL in the first example. Is GMan right? This might kinda ...

Complex initialization of const fields

Consider a class like this one: class MyReferenceClass { public: MyReferenceClass(); const double ImportantConstant1; const double ImportantConstant2; const double ImportantConstant3; private: void ComputeImportantConstants(double *out_const1, double *out_const2, double *out_const3); } There is a routine (ComputeIm...

How can class fields be initialized?

A bit of a basic question, but I'm having difficulty tracking down a definitive answer. Are initializer lists the only way to initialize class fields in C++, apart from assignment in methods? In case I'm using the wrong terminology, here's what I mean: class Test { public: Test(): MyField(47) { } // acceptable int MyField; };...

Initializer list makes variable uninitialized?

I have a class with the only constructor like this: IntroScreen::IntroScreen(Game *game) : View(game), counter(0.0f), message(-1), continueAlpha(255), continueVisible(false), screenAlpha(255), fadeIn(false), fadeOut(false) { } And somewhere in a method I have this if-statement if (counter > 10.0f) And Valgrind says for that...

What does the colon mean in a constructor?

Possible Duplicates: C++ weird constructor syntax Variables After the Colon in a Constructor What does a colon ( : ) following a C++ constructor name do? For the C++ function below: cross(vector<int> &L_, vector<bool> &backref_, vector< vector<int> > &res_) : L(L_), c(L.size(), 0), res(res_), backref(backref_) { ...

Ctor Initializer: self initialization causes crash?

I had a hard time debugging a crash on production. Just wanted to confirm with folks here about the semantics. We have a class like ... class Test { public: Test() { // members initialized ... m_str = m_str; } ~Test() {} private: // other members ... std::string m_str; }; Someone changed the initialization to use c...

Base class's destructor called without destroying the base class!

#include<iostream> using namespace std; class A { public: int i; A() {cout<<"A()"<<endl;} ~A() {cout<<"~A()"<<endl;} }; class B:public A { public: int j; B(): j(10) { this->i=20; this->~A(); } }; int main() { B abc; cout<<"i="<<abc.i...

Initializing a member array in constructor initializer

class C { public: C() : arr({1,2,3}) //doesn't compile {} /* C() : arr{1,2,3} //doesn't compile either {} */ private: int arr[3]; };*/ I believe the reason is that arrays can be initialized only with = syntax, that is: int arr[3] = {1,3,4}; Questions How can I do what I want to do (that is, initialize an array in a ...