I was trying to learn smart pointer as i came across this.
{ //Example 1
    //String to be copied
    std::string strHello = "HelloWorld1";
    int size = strHello.length();
    //Creating Ptr using make_unique
    std::unique_ptr<char[]> pstrText;
    pstrText = make_unique<char[]>(size + 1); // Allocating +1 for \0
    //Copying values to the new pointer
    int r = memcpy_s(pstrText.get(), size + 1, strHello.c_str(), size);
    //Printing
    std::cout << pstrText.get() << std::endl;
}
{ //Example 2
    //String to be copied
    std::string strHello = "HelloWorld2";
    int size = strHello.length();
    //Creating Ptr using make_unique
    std::unique_ptr<char[]> pstrText;
    pstrText = make_unique<char[]>(size);
    //Copying values to the new pointer
    int r = memcpy_s(pstrText.get(), size, strHello.c_str(), size);
    //Printing
    std::cout << pstrText.get() << std::endl;
}
{//Example 3
    //String to be copied
    std::string strHello = "HelloWorld3";
    int size = strHello.length();
    //Creating Ptr using make_unique
    std::unique_ptr<char[]> pstrText;
    pstrText = make_unique<char[]>(size + 1); //Allocating + 1
    //Copying values to the new pointer
    int r = memcpy_s(pstrText.get(), size, strHello.c_str(), size);
    //Printing
    std::cout << pstrText.get() << std::endl;
}
{//Example 4
    //String to be copied
    std::string strHello = "HelloWorld4";
    int size = strHello.length();
    //Creating Ptr using make_unique
    std::unique_ptr<char[]> pstrText;
    pstrText = make_unique<char[]>(size);
    //Copying values to the new pointer
    int r = memcpy_s(pstrText.get(), size + 1, strHello.c_str(), size); 
    //Printing
    std::cout << pstrText.get() << std::endl;
}
The Output is as Follows using VS 2013 Debug(Win32):
HelloWorld1 HelloWorld2²²²²½½½½½½½½■ HelloWorld3 HelloWorld4²²²²½½½½½½½½■
- If Example 1 is correct why does the Example 3 also give the correct output?
- What Does the garbage values at the end signify?
- Why didn't the compiler throw any error or exception?
- In Example 4 Why is there no error when we had tried to copy a value at the end but was not initialized
- How do we properly initialize a smart pointer in this case? Will anything change if it a BYTE array instead of char;
 
     
    