c++ std::map problem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

please cc me.

I'm having trouble making this snip of code work. I just want to keep a map of created objects (for (un)marshalling), but when I run the attached code, I see that the constructor is only called once, giving an output of 0111.

Now if I make this change:
-    static const toto* create() { return &totos[nextid]; }
+    static const toto* create() { toto(); return &totos[nextid]; }
I get 0246, which is what is expected, but not the initial objective.

Am I doing something wrong? Is there a bug in g++ or libstdc++?
I get the problem with both 3.3.2 20030812 and 2.95.4 20011002 (Debian sid)
I don't know what kind of keywords I could use to search, so I have to post.

Thank you,
#include <iostream>
#include <map>

class toto {
	toto():id(nextid++){}
	const unsigned int id;
	friend class std::map<unsigned int, const toto>;
public: // for debug purposes
	static std::map<unsigned int, const toto> totos;
	static unsigned int nextid;
public:
	static const toto* create() { return &totos[nextid]; }
};

unsigned int toto::nextid(0);
std::map<unsigned int, const toto> toto::totos;

int main(int argc, char* argv[]) {
	std::cout << toto::nextid;
	toto::create();
	std::cout << toto::nextid;
	toto::create();
	std::cout << toto::nextid;
	toto::create();
	std::cout << toto::nextid << std::endl;
}

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux