Fra*_*fer 5 c++ inheritance smart-pointers c++11
我不想写每个使用shared_ptr或unique_ptr的类:
std::shared_ptr<Foo> p = CreateFoo();
Run Code Online (Sandbox Code Playgroud)
我正在使用这个:
template <typename T>
struct ptr_types
{
typedef std::shared_ptr<T> sptr;
typedef std::unique_ptr<T> uptr;
};
class A: public ptr_types<A>
{
public:
A(){}
int m;
};
Run Code Online (Sandbox Code Playgroud)
然后,我可以这样做:
A::sptr p(new A);
Run Code Online (Sandbox Code Playgroud)
从设计的角度继承使用智能指针的类是一个问题吗?有更优雅的解决方案吗?
编辑:
是的我可以使用:
auto p = std::make_shared<A>();
Run Code Online (Sandbox Code Playgroud)
但如果我有这个怎么办:
std::shared_ptr<A> A::CreateA()
{
....
}
void A::Sink(std::unique_ptr<A> p)
{
...
}
Run Code Online (Sandbox Code Playgroud)
有更好的东西吗?
A::sptr A::CreateA()
{
...
}
void A::Sink(A::uptr p)
{
...
}
Run Code Online (Sandbox Code Playgroud)
也许这个问题没有意义..而且我一直懒得在函数类型返回或参数中编写std :: blabla.
创建类的(智能)指针不应该是该类的责任。我不认为添加这样的行为是个好主意,但如果你想这样做,我认为你的创建者函数应该使用完美转发,这样你就可以传递构造参数:
template<typename T, typename... Args>
std::unique_ptr<T> CreateA(Args&&... args)
{
return std::make_shared<T>(std::forward<Args>(args)...);
}
Run Code Online (Sandbox Code Playgroud)
单独使用 std::make_shared (如果你有 C++0x14,则使用 std::make_unique )是创建廉价分配对象的标准解决方案。我认为不需要任何额外的解决方案。
| 归档时间: |
|
| 查看次数: |
228 次 |
| 最近记录: |