與智能指針練習,看它們如何能夠防止內存泄漏,並通過RAII輔助內存管理,我做了以下內容:升壓智能指針和非POD類型(C++)
#include <boost/shared_ptr.hpp>
#include <vector>
#include <iostream>
using std::cout;
using boost::shared_ptr;
class myobj {
public:
shared_ptr<int> a;
myobj() {
shared_ptr<int> b(new int[50]);
a = b;
}
~myobj() {}
};
typedef boost::shared_ptr<myobj> myobj_ptr;
int main() {
for (unsigned int i=0; i < 5000000; i++) {
myobj *foo = new myobj();
myobj *bar = new myobj();
myobj_ptr bar_ptr(bar);
bar_ptr = myobj_ptr(foo);
bar = foo;
}
return 0;
}
有什麼我不可能與此類似(希望我的目標遇到的「僞」代碼):
a = new int[50];
我明白爲什麼這不會從升壓shared_ptr.hpp文件本身的工作,但我不不明白爲什麼這不起作用:
shared_ptr<int> a;
int *b;
myobj() {
b = new int[50];
boost::detail::sp_enable_shared_from_this(a, b, b);
}
它返回此錯誤:
warning: cannot pass objects of non-POD type ‘class boost::shared_ptr<int>’ through ‘...’; call will abort at runtime
我不明白究竟。
@丹尼爾,我已經加了一點,我認爲你的原意更密切。 – bdonlan 2011-01-29 11:17:14