Quando si creano classi template in C ++, se il tipo su cui il template sarà specializzato è un tipo shared_ptr, è meglio rendere T un tipo shared_ptr o rendere T un tipo non-pointer?
Ad esempio, quale delle seguenti classi è migliore, FirstExample o SecondExample? O in alternativa, è interamente dipendente dal contesto? In tal caso, puoi un esempio di contesto in cui FirstExample è migliore e un contesto in cui SecondExample è migliore?
Nel mio caso, la chiarezza di utilizzo è una priorità più alta delle prestazioni.
#include <iostream>
#include <memory>
using IntPtr = std::shared_ptr<int>;
template <class T>
class FirstExample
{
public:
FirstExample( std::shared_ptr<T> value )
:myData( value ) {}
std::shared_ptr<T> getData() const { return myData; }
private:
std::shared_ptr<T> myData;
};
template <class T>
class SecondExample
{
public:
SecondExample( const T& value )
:myData( value ) {}
T getData() const { return myData; }
private:
T myData;
};
int main(int argc, const char * argv[])
{
FirstExample<int> firstInstance( std::make_shared<int>( 10 ) );
IntPtr copyOfFirstInstanceData = firstInstance.getData();
SecondExample<IntPtr> secondInstance( std::make_shared<int>(10) );
IntPtr copyOfSecondInstanceData = secondInstance.getData();
return 0;
}