shared_ptrを使用してテストを行いましたが、以下の問題を理解することはできません。Boostライブラリを学び始めたところです。理由を教えてくれる人はいますか?
#include <boost\shared_ptr.hpp>
#include <iostream>
class A
{
public:
virtual void sing()
{
std::cout<<"A";
}
protected: virtual ~A() {};
};
class B : public A
{
public:
virtual void sing()
{
std::cout << "B";
}
virtual ~B() {};
};
int foo()
{
boost::shared_ptr<A> pa(new B());
pa->sing();
delete static_cast<B*>(pa.get());
delete pa.get(); //this line has a problem error C2248: “A::~A”: can't access protected memmber(declared in class“A")
return 0;
}
int main()
{
foo();
return 0;
}
ただし、その行がコメント化されている場合はコンパイルできます。確かに、shared_ptrが、私が行ったように、main関数から内部的に維持されているポインターを削除するという意味ではありません。pa.get()
によって返されるポインターと内部的に維持されるポインターの間に違いはありますか?