在ArduinoUnit單元測試庫中,我提供了一個給TestSuite一個名字的機制。庫的用戶可以編寫以下內容:如何防止需要複製傳遞給avr-gcc C++構造函數的字符串?
TestSuite suite("my test suite");
// ...
suite.run(); // Suite name is used here
這是預期的用法 - TestSuite的名稱是字符串文字。然而,爲了防止難以發現的錯誤,我覺得有義務滿足不同用途,例如:
char* name = (char*) malloc(14);
strcpy(name, "my test suite");
TestSuite suite(name);
free(name);
// ...
suite.run(); // Suite name is used here
因此我已實施的TestSuite是這樣的:
class TestSuite {
public:
TestSuite(const char* name) {
name_ = (char*) malloc(strlen(name) + 1);
strcpy(name_, name);
}
~TestSuite() {
free(name_);
}
private:
char* name_;
};
暫且不論問題失敗的處理內存分配失敗在構造函數中我更願意簡單地將指針分配給成員變量是這樣的:
class TestSuite {
public:
TestSuite(const char* name) : name_(name) {
}
private:
const char* name_;
};
有沒有什麼辦法可以改變界面強制它被'正確'使用,以便我可以取消動態內存分配?
因爲,不幸的是,avrlibc使用Arduino的(和AVR-GCC)沒有一個STL實現... – 2009-06-22 14:17:09