#include <memory>
#include <iostream>
class base
{
public:
virtual void f() const
{
std::cout << "base" << std::endl;
}
};
class derived : public base
{
public:
void f() const
{
std::cout << "derived" << std::endl;
}
};
int main()
{
std::shared_ptr< base > ptr = std::make_shared< derived >();
ptr->f();
}
これを実行すると、derived になる。
% c++ shared_ptr_inheritance.cpp
% ./a.out
derived
継承関係にない shared_ptr 型を渡すとエラーになるようだ。
#include <memory>
int main()
{
std::shared_ptr< char > incompatible = std::make_shared< int >()
;
}
実際のエラーの例。
% c++ shared_ptr_incompatible.cpp
shared_ptr_incompatible.cpp:5:29: error: no viable conversion from
'shared_ptr' to 'shared_ptr'
std::shared_ptr< char > incompatible = std::make_shared< int >();
^ ~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/v1/memory:3703:23: note: candidate constructor not viable: no
known conversion from 'typename enable_if::value,
shared_ptr >::type' (aka 'std::__1::shared_ptr') to
'std::nullptr_t' (aka 'nullptr_t') for 1st argument
_LIBCPP_CONSTEXPR shared_ptr(nullptr_t) _NOEXCEPT;
^
/usr/include/c++/v1/memory:3717:5: note: candidate constructor not viable: no
known conversion from 'typename enable_if::value,
shared_ptr >::type' (aka 'std::__1::shared_ptr') to 'const
std::__1::shared_ptr &' for 1st argument
...
前回。
セコメントをする