On Mar 14, 6:57 pm, Goedson Paixao <goed...@[EMAIL PROTECTED]
> wrote:
> On 14 mar, 10:35,Soumen<soume...@[EMAIL PROTECTED]
> wrote:
>
>
>
> > On Mar 12, 7:23 pm, ppi <vod...@[EMAIL PROTECTED]
> wrote:
>
> > > On Mar 12, 10:02 am,Soumen<soume...@[EMAIL PROTECTED]
> wrote:
>
> > > > Hi,
>
> > > > I've implemented singleton in one of my project. The way my
command
> > > > works is user issues
> > > > the command and when the command finishes it object gets
destroyed.
> > > > Singleton is required
> > > > to make sure when the command is running, user shouldn't be able
to
> > > > invoke it again since
> > > > this is a GUI application. And my top level class uses auto_ptr.
The
> > > > interesting part is it always
> > > > crashes in the 2nd invocation (after the 1st one is complete) -
some
> > > > sort of pointer corruption.
> > > > If I remove the static pointer for singleton implementation (i.e.
> > > > remove the singleton implementation)
> > > > itself or change the auto_ptr to normal pointers everything works
> > > > fine. I made sure that there's no
> > > > transfer of owner****p for auto_ptr objects.
>
> > > > Any clue what could be going wrong?
>
> > > > Regards,
> > > > ~Soumen
>
> > > maybe you should post some code, like the singleton code ...
>
> > > -- paulo
>
> > Here it goes:
> > -------------
>
> > class MyTypeSTon {
> > public:
> > static MyTypeSTon* create();
> > void addData(const std::string &data);
> > private:
> > MyTypeSTon();
>
> > typedef std::vector<std::string > ContainerType;
> > auto_ptr<ContainerType > _container;
> > static MyTypeSTon* _instance;
>
> > }
>
> > MyTypeSTon*
> > MyTypeSTon::create()
> > {
> > if (_instance == NULL) {
> > _instance = new MyTypeSTon();
> > }
>
> > return _instance;
>
> > }
>
> > MyTypeSTon::MyTypeSTon()
> > : _container(new ContainerType)
> > {}
>
> > void
> > MyTypeSTon::addData(const std::string &data)
> > {
> > if (_container.get()) {
> > _container.push_back(data);
> > }
>
> > }
>
> You should have:
>
> MyTypeSTon::~MyTypeSTon() {
> _instance = NULL;
>
> }
>
> to make sure _instance never points to an invalid object.
Yes, I'd that in actual code. Here in the example I missed it.


|