当我运行以下代码时,我看到B析构函数中的sptr指针为NULL。
#include <iostream>
#include <boost/shared_ptr.hpp>
#include <boost/thread/thread.hpp>
#include <boost/thread/condition_variable.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/bind.hpp>
using namespace std;
class B
{
public:
~B()
{
std::cout<< "B Dtor ";
// Access sptr
}
void RunB()
{
sptr.reset(new int(2));
}
private:
boost::shared_ptr<int> sptr;
};
class A
{
public:
void RunA()
{
b[1].RunB();
}
private:
B b[1];
};
int main(int argc, char *argv[])
{
cout << "Hello World!" << endl;
A a;
a.RunA();
return 0;
}
然而,当我将B b [1]更改为B b,即从数组更改为常规对象时,sptr point在B析构函数内部为NOT NULL。为什么?有人可以帮忙吗?我在这里完全无能为力。
#include <iostream>
#include <boost/shared_ptr.hpp>
#include <boost/thread/thread.hpp>
#include <boost/thread/condition_variable.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/bind.hpp>
using namespace std;
class B
{
public:
~B()
{
std::cout<< "B Dtor ";
// Access sptr
}
void RunB()
{
sptr.reset(new int(2));
}
private:
boost::shared_ptr<int> sptr;
};
class A
{
public:
void RunA()
{
b.RunB();
}
private:
B b;
};
int main(int argc, char *argv[])
{
cout << "Hello World!" << endl;
A a;
a.RunA();
return 0;
}
答案 0 :(得分:2)
在C ++中,数组的索引从0开始。因此,如果你有一个大小为1的数组,那么要访问第一个元素,你需要new this.handlerMethod
而不是b[0]
。