如何简洁地创建一个shared_ptr?
How to create a shared_ptr concisely?
如何缩短语句:
auto ptr = std::shared_ptr<CPoint>(new CPoint(x, y));
请注意 CPoint
出现了两次。能短点吗?
喜欢:
auto ptr = XXXX<CPoint>(x, y);
XXXX
是宏或任何东西。它应该适用于具有任何参数的任何构造函数。
auto ptrA = XXXX<ClassA>(); // a shared_ptr to new ClassA()
auto ptrB = XXXX<ClassB>(a, b, c); // a shared_ptr to new ClassB(a, b, c)
您可以而且应该使用函数模板 std::make_shared
:
auto p = std::make_shared<CPoint>(x, y);
auto pA = std::make_shared<ClassA>(); // a shared_ptr to new ClassA()
auto pB = std::make_shared<ClassB>(a, b, c); // a shared_ptr to new ClassB(a, b, c)
要给它一个不同的名字,你可以使用一个简单的包装函数:
template< class T, class... Args>
std::shared_ptr<T> foo( Args&&... args )
{
return std::make_shared<T>( std::forward<Args>(args)...);
}
然后
auto pB = foo<ClassB>(a, b, c);
如何缩短语句:
auto ptr = std::shared_ptr<CPoint>(new CPoint(x, y));
请注意 CPoint
出现了两次。能短点吗?
喜欢:
auto ptr = XXXX<CPoint>(x, y);
XXXX
是宏或任何东西。它应该适用于具有任何参数的任何构造函数。
auto ptrA = XXXX<ClassA>(); // a shared_ptr to new ClassA()
auto ptrB = XXXX<ClassB>(a, b, c); // a shared_ptr to new ClassB(a, b, c)
您可以而且应该使用函数模板 std::make_shared
:
auto p = std::make_shared<CPoint>(x, y);
auto pA = std::make_shared<ClassA>(); // a shared_ptr to new ClassA()
auto pB = std::make_shared<ClassB>(a, b, c); // a shared_ptr to new ClassB(a, b, c)
要给它一个不同的名字,你可以使用一个简单的包装函数:
template< class T, class... Args>
std::shared_ptr<T> foo( Args&&... args )
{
return std::make_shared<T>( std::forward<Args>(args)...);
}
然后
auto pB = foo<ClassB>(a, b, c);