ctor , copy ctor and assignment operator