25
namespace WidgetFunc
{
template <typename T>
class Widgett
{
public:
template <typename T>
Widgett(T* pcObj, size_t size)
{
m_pcObj = new T[size];
memset(m_pcObj, 0, size);
memcpy_s(m_pcObj, size, pcObj, size);
};
~Widgett()
{
delete[] m_pcObj;
}
template <typename T>
void swap(Widgett<T>& other)
{
using std::swap;
swap(m_pcObj, other.m_pcObj);
};
private:
//Widgett() = delete;
//Widgett& operator=(Widgett&) = delete;
T* m_pcObj;
};
template<typename T>
void swap(Widgett<T>& a, Widgett<T>& b)
{
a.swap(b);
}
}
int main()
{
using namespace WidgetFunc;
char szHello[] = "hello!hello!";
Widgett<char> a(szHello, sizeof szHello);
char szWorld[] = "world!world!";
Widgett<char> b(szWorld, sizeof szWorld);
using std::swap;
swap(a, b);
swap(szHello, szWorld);
return 0;
}