在ArduinoUnit单元测试库中,我提供了一种为 TestSuite 命名的机制。该库的用户可以编写以下内容:
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_;
};
有什么方法可以更改接口以强制“正确”使用它,以便我可以取消动态内存分配?