Re: Newing objects in constructor
"tech" <naumansulaiman@googlemail.com> wrote in message
news:fc6f277b-31ca-45b7-a8ea-b86b2b5101d2@p25g2000hsf.googlegroups.com...
Hi, Whenever i have a class that contains references to other classes
i keep
end up doing the below. However it doesn't seem so safe or elegant.
How do the
pros initialise subobjects, any ideas to improve the below would be
welcome.
___________________________________________________________
#include <memory>
#include <cstdio>
#define PRINTF_THIS(mp_this, mp_name, mp_func) ( \
std::printf("(%p)->" # mp_name "::" # mp_func "\n", \
(void*)(mp_this)) \
)
struct obj1 {
obj1() { PRINTF_THIS(this, obj1, obj1()); }
~obj1() { PRINTF_THIS(this, obj1, ~obj1()); }
};
struct obj2 {
obj2() { PRINTF_THIS(this, obj2, obj2()); }
~obj2() { PRINTF_THIS(this, obj2, ~obj2()); }
};
struct obj3 {
obj3() { PRINTF_THIS(this, obj3, obj3()); }
~obj3() { PRINTF_THIS(this, obj3, ~obj3()); }
};
struct obj4 {
obj4() { PRINTF_THIS(this, obj4, obj4()); }
~obj4() { PRINTF_THIS(this, obj4, ~obj4()); }
};
class not_copyable {
not_copyable(not_copyable const&);
not_copyable const& operator =(not_copyable const&);
protected:
not_copyable() {}
~not_copyable() {}
};
class A : private not_copyable {
std::auto_ptr<obj1> m_obj1;
std::auto_ptr<obj2> m_obj2;
std::auto_ptr<obj3> m_obj3;
std::auto_ptr<obj4> m_obj4;
public:
A()
: m_obj1(new obj1()),
m_obj2(new obj2()),
m_obj3(new obj3()),
m_obj4(new obj4()) {
PRINTF_THIS(this, A, A());
}
~A() { PRINTF_THIS(this, A, ~A()); }
};
int main() {
{
A a;
}
std::puts("\n\n_____\npress <ENTER> to exit...");
std::getchar();
return 0;
}
___________________________________________________________
Does that do what you want?