抽象クラス ABC に shared_ptr を使用します。ABCImpl クラスは ABC の実装です。abc_ptr は、ABCImpl オブジェクトを指す shared_ptr< ABC> です。呼び出し元関数では、abc_ptr は ABC クラスのメンバー関数 (func_in_ABC) の 1 つを呼び出します。コンパイルは成功です。しかし、nm や objdump を使用すると、abc_ptr のシンボルしか表示されませんでした。呼び出し元関数の func_in_ABC() に対して表示されるシンボルはありません。
呼び出し元関数で func_in_ABC() のシンボルの出力を取得する理由、または方法を知っている人はいますか?
コードは次のとおりです。 ABC.h:
#include <boost/shared_ptr.hpp>
class ABC
{
public:
virtual void func_in_ABC(const int param) = 0;
};
typedef boost::shared_ptr<ABC> ABCPtr;
ABCPtr get_ABC_ptr();
ABCImpl.h で:
#include "ABC.h"
class ABCImpl : public
{
public:
ABCImpl() {}
void func_in_ABC(const int param);
private:
int data;
};
ABCImpl.cpp で:
#include "ABCImpl.h"
ABCPtr get_ABC_ptr()
{
return ABCPtr(new ABCImpl());
}
void ABCImpl::func_in_ABC(const int param)
{
data = param;
}
呼び出し元関数 D.cpp:
#include "D.h"
#include "ABC.h"
void D::call_ABC()
{
ABCPtr abc_ptr = get_ABC_ptr();
abc_ptr->func_in_ABC(100);
}
nm からの Do の出力:
U _Unwind_Resume
U get_ABC_ptr()
0000000000000000 T D::call_ABC()
0000000000000000 W boost::shared_ptr<ABC>::operator->() const
0000000000000000 r boost::shared_ptr<ABC>::operator->() const::__PRETTY_FUNCTION__
U __assert_fail
U __gxx_personality_v0
ABC.h の func_in_ABC の定義を変更すると、D.cpp のコンパイルが失敗します。Do をコンパイルするときに、クラス ABC の定義をチェックすると思います。