我是 boost 库的新手并正在尝试boost::scoped_ptr
,它指出这个智能指针不能被复制或移动。但是我在玩一些代码并发现了一个问题。我能够创建新实例scoped_ptr
并使用现有的有效scoped_ptr
. 因此,如果其中一个scoped_ptr
's 范围已结束并释放内存,则其他 scoped_ptr 仍认为其有效指针并尝试访问。它在运行时给了我错误。
我正在使用 cygwin g++ 编译器并在编译时使用 std=c++03 选项的 boost 库版本 1.66。
#include<boost/scoped_ptr.hpp>
#include<iostream>
using namespace std;
int main(){
boost::scoped_ptr<int> pi(new int(9));
cout << *pi << endl;
cout << uintptr_t(pi.get()) << endl;
boost::scoped_ptr<int> ppi(pi.get()); // initialized with same memory pointed by pi.
cout << *ppi << endl; // so ownership of same memory is with pi.
cout << uintptr_t(ppi.get()) << endl; // as well as with ppi.
pi.reset(new int(12)); //its previous memory location pointing to 9 is deallocated.
cout << *ppi << endl; // throws garbage value..
cout << uintptr_t(ppi.get()) << endl; // shows same memory location it had previous memory shown by pi.
cout << *pi << endl;
cout << uintptr_t(pi.get()) << endl;
return 0;
}
所以下面是编译好的代码运行的快照......
-> g++ -std=c++03 -Wall scoped_ptr.cpp
-> ./a.exe
9
25769804960
9
25769804960
-2144292696
25769804960
12
25769879920
Aborted (core dumped)
在执行结束时显示核心转储,它-2144292696
在上面的运行中显示不正确。
我还检查了boost::scoped_ptr
是否能够将其分配给指针
int * p = pi.get()
语句编译得很好(这应该工作吗?)
scoped_pt
上述操作是否用其他scoped_ptr
有效初始化r?