我認爲這是一個最佳實踐問題。C++通過已通過的參考來修改自我
在C++中,我有一個類似Python的os.path的文件系統路徑的包裝類。在這個包裝類中,有一個名爲「Split」的成員函數,用於搜索最後發生的路徑分隔符,並將其分解爲「尾部」(路徑的最後部分)和「頭部」(其他所有內容)。就目前而言,該函數使用自己的成員變量m_filepath進行分割。
一些代碼:
class FilePath {
public:
void Split(FilePath& head, FilePath& tail) const
{
FilePath h;
FilePath t;
//initialize h, t with portions of m_filepath...
head = h;
tail = t;
}
private:
std::string m_filepath;
};
int main(int argc, char ** argv)
{
FilePath some_path_1("/");
FilePath some_path_2("/home/");
some_path_1.Split(some_path_1, some_path_2);
return 0;
}
當我做這樣的事情,some_path_1的m_filepath將由什麼「頭」覆蓋原來是。常量運算符似乎也不介意。
我的問題是,處理這個問題的最佳方法是什麼?拋出異常?允許覆蓋該對象(這令我擔心,聽起來不安全),並告訴開發人員謹慎?聰明地使用return語句?
我不認爲你需要做任何事情;如果有人寫'some_path_1.Split(some_path_1,some_path_2);'那麼你可以假設他們知道他們覆蓋'some_path_1'的舊內容。在路徑操作中,做這種事情並不少見 - 在原地提取路徑的一部分,不必再創建另一個變量。 –
只需返回一對新路徑。它沒有什麼特別的巧妙。拋棄輸出參數。函數返回結果。 –