Как правильно создать шаблон функции для перестановки местами двух значений

Имеется задача создать шаблон функции для перестановки местами двух значений.При выводе второй строки выдаёт разные значки. Подскажите пожалуйста в чём ошибка.

Swap.h

#include <iostream>

template<class T> void Swap(T& a, T& b)
{
    T temp = a;
    a = b;
    b = temp;
}

MyString.h

class MyString
{
    char* m_pStr;   //строка-член класса

public:

    MyString(); // конструктор без параметров
    MyString(const char* str);// конструктор с параметром
    MyString(const MyString& nov); // конструктор копирования
    ~MyString(); // деструктор

    const char* GetString()const;
    void SetNewString(const char* str);

    friend std::ostream& operator<<(std::ostream& os, const MyString& other);
};

std::ostream& operator<<(std::ostream& os, const MyString& other);

MyString.cpp

#define _CRT_SECURE_NO_WARNINGS
#include <string>
#include < string.h >
#include "MyString.h"
#include <iostream>


MyString::MyString() // конструктор без параметров
{
    m_pStr = nullptr;
}

MyString::MyString(const char* str)// конструктор с параметрами
{
    m_pStr = new char[strlen(str) + 1];
    strcpy(m_pStr, str);
}

MyString::MyString(const MyString& nov) // конструктор копирования
{
    m_pStr = new char[strlen(nov.m_pStr) + 1];
    strcpy(m_pStr, nov.m_pStr);
}

MyString::~MyString()// деструктор
{
    delete[] m_pStr;
}

const char* MyString::GetString()const
{
    return m_pStr;
}

void MyString::SetNewString(const char* str)
{
    delete[] m_pStr;
    if (str != nullptr)
    {
        m_pStr = new char[strlen(str) + 1];
        strcpy(m_pStr, str);
    }
}

std::ostream& operator<<(std::ostream& os, const MyString& other)
{
    os << other.m_pStr << std::endl;
    return os;
}

main

int iX = 1, iY = -1;
    Swap(iX, iY);

    std::cout << iX << " " << iY << "\n ";

    double dX = 0.5, dY = -5.5;
    Swap(dX, dY);

    std::cout << dX << " " << dY << "\n";

MyString str1("One"), str2("Two");
Swap(str1, str2);

std::cout << str1 << str2;

Ответы (0 шт):