我需要使用的框架定义了一个简单的互斥锁类,该类可以存储互斥锁所有者的名称以帮助调试:
class mutex
{
public:
explicit mutex(const std::string& mutex_owner = "");
bool acquire() const;
bool release() const;
const std::string& get_name() const {return owner_name_;}
// ...
private:
std::string owner_name_;
// ...
};
我刚刚更改了一些算法,使互斥锁类型成为模板参数,这样如果不需要锁定,我可以出于性能原因传入这个:
class non_mutex
{
public:
explicit non_mutex(const std::string& mutex_owner = "") {}
bool acquire() const {return true;}
bool release() const {return true;}
std::string get_name() const {return "";}
};
由于这个不存储名称(无需调试),我将get_name()
成员函数更改为返回 a std::string
,而不是 a const std::string&
。
现在我的问题是:这(默默地)会破坏什么吗?代码编译得很好,似乎也运行得很好,但是这个代码库中的测试很少,而且这个函数主要只在出现问题时使用,而不是经常使用。
在哪些情况下,此更改可能会触发运行时故障?
请注意,这是一个 C++03 环境,但我也会对 C++11 的答案感兴趣。