巴哈姆特

哈啦區 程式設計板
查看全文
Lumi (luminous) 2014-04-21 03:31:53
#1
方法一:
std::unique_ptr<char[]> getHello()
{
  char* str = new char[12];
  strcpy( str, "HelloWorld\n" );
  return std::unique_ptr<char[]>(str);
}

std::unique_ptr<char[]> testStr = getHello();

============================================
方法二:
static void stringDeleter( char* str )
{
  delete[] str;
};

std::shared_ptr<char> getHelloShared()
{
  char* str = new char[12];
  strcpy( str, "HelloWorld\n" );
  return std::shared_ptr<char>( str, stringDeleter );
}

std::shared_ptr<char> testStr2 = getHelloShared();

============================================
方法三:
std::vector<char> getHelloVector()
{
  std::vector<char> helloVector( 12 );
  strcpy( helloVector.data(), "HelloWorld\n" );
  return helloVector;
}

std::vector<char> testStr3 = getHelloVector();

============================================
利用RAII可以確保記憶體會被正確釋放
不過假如要對付字串,最簡潔漂亮又有效率的寫法還是std::string...
std::string getHelloString()
{
  return "HelloWorld\n";
}

std::string testStr4 = getHelloString();
compiler極有可能使上面這一行省略建構暫時物件,只呼叫一次testStr4的普通建構子
再不然靠著move建構子不會真的完整複製物件
再再不然std::string也還有copy on write...

開啟 APP

face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】