我将 shared_ptr 用于抽象类 ABC。ABCImpl 类是 ABC 的实现。abc_ptr 是一个shared_ptr<ABC> 指向一个ABCImpl 对象。在调用者函数中,abc_ptr 将调用 ABC 类中的成员函数 (func_in_ABC) 之一。编译成功。但是当我使用 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 的定义但是为什么我在调用者处找不到符号以映射到 ABC 中的定义?