Question about different ways to declare objects and their effects on RAM usuage

tuxduino:
Shouldn't init() and doSomething() be class-methods instead of instance methods ?

If you mean static then yes, taking the example below ( provided by OP )

#include <classes.h>

void setup()
{
	{Class1 c1;c1.init();}
	{Class2 c2;c2.init();}
	{Class3 c3;c3.init();}
}

void loop()
{
	ds();
}

void ds()
{
	{Class1 c1;c1.doSomething();}
	{Class2 c2;c2.doSomething();}
	{Class3 c3;c3.doSomething();}
}

The classes here are doing specific tasks in two different places, which is fine, but a waste of memory weather it be the stack or heap.
If the class definitions don't need to keep unique instance data then the class could be entirely static i.e.

class Class1{
  public:
    static void DoSomething( void ){ return; }
};

void ds()
  {
    Class1::DoSomething();
    Class2::DoSomething();
    Class3::DoSomething();
  }