【C++基础小疑点】冰天雪地360度赤身裸体跪求大神
【C++基础小问题】冰天雪地360度赤身裸体跪求大神!
直接上代码:
(还是先说一下:写一个生产消费者小测试代码,对象从boost::pool里面分配,由于不止一个池,所以我在结构体里面加了一个指针用于指向分配它的内存池,这样以后用完了就好释放了,不用到处找它娘了)
问题有二:
1. 网上的资料说,boost pool里的free是将分配出来的内存还给池,也就是说,那个 free操作并不会销毁内存,所以最后面的一行赋值操作是可以的,运行也是可以的,但是,我咋知道它是否归还了呢??(额,对boost pool不是很了解,新手上路...)
2. 这种搞法可行么?有没有其他更好的办法??
------解决思路----------------------
哇哈哈,好多年没看到这么虔诚的跪求了。
我没用过boost,但是从理论上来说你这样用是没问题,甚至delete this;这种代码到处都是。
至于你说的所谓销毁,只不过使用者声明不再使用而已,就像你new了之后delete,难道计算机的内存会真的消失吗?只不过这种情况下你的代码没有了这部分内存的使用权,你继续强行使用,会导致别的代码特别是使用了这部分内存的代码发生不可预知的错误。原理就大概这个意思,所以你释放之后还是老老实实别再用了。
------解决思路----------------------
查了下文档, Boost没提供方法查看对象是否已经归还.
直接上代码:
(还是先说一下:写一个生产消费者小测试代码,对象从boost::pool里面分配,由于不止一个池,所以我在结构体里面加了一个指针用于指向分配它的内存池,这样以后用完了就好释放了,不用到处找它娘了)
boost::pool<> this_pl(sizeof(stTest));
stTest * pTest = (stTest *)this_pl.malloc();
pTest->p = &this_pl; // 记录谁分配了它
pTest->n = 11;
sprintf(pTest->sz,"this is a test");
std::cout<<pTest->n<<" "<<pTest->sz<<std::endl;
pTest->p->free(pTest); // 这里“释放”这个结构体(根据网上的资料是说还给pool,不会销毁它)
pTest->n = 12;
问题有二:
1. 网上的资料说,boost pool里的free是将分配出来的内存还给池,也就是说,那个 free操作并不会销毁内存,所以最后面的一行赋值操作是可以的,运行也是可以的,但是,我咋知道它是否归还了呢??(额,对boost pool不是很了解,新手上路...)
2. 这种搞法可行么?有没有其他更好的办法??
------解决思路----------------------
哇哈哈,好多年没看到这么虔诚的跪求了。
我没用过boost,但是从理论上来说你这样用是没问题,甚至delete this;这种代码到处都是。
至于你说的所谓销毁,只不过使用者声明不再使用而已,就像你new了之后delete,难道计算机的内存会真的消失吗?只不过这种情况下你的代码没有了这部分内存的使用权,你继续强行使用,会导致别的代码特别是使用了这部分内存的代码发生不可预知的错误。原理就大概这个意思,所以你释放之后还是老老实实别再用了。
------解决思路----------------------
查了下文档, Boost没提供方法查看对象是否已经归还.