Difference between revisions of "Kexi/Junior Jobs/Add d-pointers"

Jump to: navigation, search
(Introduction)
(Introduction)
Line 34: Line 34:
 
   Private * const d;
 
   Private * const d;
 
  };
 
  };
 
+
 
  // MyClass.cpp
 
  // MyClass.cpp
 
  class MyClass::Private {
 
  class MyClass::Private {
Line 41: Line 41:
 
   Foo foo;
 
   Foo foo;
 
  };
 
  };
 
+
 
  MyClass::MyClass()
 
  MyClass::MyClass()
 
   : d(new Private)
 
   : d(new Private)
Line 47: Line 47:
 
   d->foo.doSomething();
 
   d->foo.doSomething();
 
  }
 
  }
 
+
 
  MyClass::~MyClass()
 
  MyClass::~MyClass()
 
  {
 
  {

Revision as of 19:49, 21 November 2011

GCI_2011_logo_URL_blueborder-nowww.jpeg

Goal

Improve internal APIs in Kexi. This can be done easily by introducing d-poitners to classes that lack them.

Introduction

Read section about d-pointers on Techbase (d-pointers only, not shared d-pointers).

Classes that have to be converted are in this form:

// MyClass.h
class MyClass {
public:
 MyClass();
private:
 Foo m_foo;
};

// MyClass.cpp
MyClass::MyClass() {
 m_foo/doSomething();
}

After converting to d-pointer it should be:

// MyClass.h
class MyClass {
public:
 MyClass();
private:
 class Private;
 Private * const d;
};

// MyClass.cpp
class MyClass::Private {
public:
 Private() 
 Foo foo;
};

MyClass::MyClass()
 : d(new Private)
{
 d->foo.doSomething();
}

MyClass::~MyClass()
{
 delete d;
}

Extra tasks needed

After converting to d-pointer:

  • any code referring to m_foo attribute should be changed to d->foo
  • if there is inline code in header file that uses member variable, do not move the variable to d-pointer unless you know for sure it isn't there for optimization

Required skills

Basic Qt, average C++.

  • Work within a new branch kexi-dpointers-gci, please create.

Notes to mentor

  • Please always emphasize importance of coding style to students and check that - it's so easier to maintain the style from day one instead of fixing afterwards. Show Techbase articles for that.
  • Take care of coding practices too (see Techbase articles)

Content is available under Creative Commons License SA 4.0 unless otherwise noted.