|
Boost Users : |
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2008-03-25 12:28:16
AMDG
Joost Meijles wrote:
> Hi All,
>
> I am trying to use the Boost Pool library, more specifically I am trying to use the singleton pool interface.
> Everything seems to work fine, till the moment I use it to create an object from a class containing a (STL) map, which results in a segmentation fault.
> Does anyone know why this happens, or how to work around it?
>
> What I find also strange is that the constructor and destructor of the class doesn't seem to be called when using the pool. Is this normal behavior?
>
Yes.
myPool::malloc does not initialize the MyClass.
You need to do so explicitly.
#include <vector>
#include <map>
#include <boost/pool/singleton_pool.hpp>
using namespace std;
class MyClass {
public:
int x;
vector<int> y;
map<int, int> z;
};
int main() {
typedef boost::singleton_pool<void, sizeof(MyClass)> myPool;
MyClass * const t = (MyClass *) myPool::malloc();
new(t) MyClass;
t->x = 1;
t->y.push_back(2);
t->z.insert(make_pair(3,3));//causes segmentation fault
t->~MyClass();
myPool::purge_memory();
}
In Christ,
Steven Watanabe
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net