以下是一个例子:
class Log
{
void AddLogger(ILogger& oLogger) noexcept
{
m_oLoggers.emplace(&oTracer);
}
std::vector<ILogger*> m_oLoggers;
}
class FileLogger : public ILogger{}
FileLogger myLogger{};
Log myLog{};
myLog.AddLogger(myLogger);
此处myLogger
和myLog
具有相同的生命周期,因为它们位于相同的范围内。我使用指针向量,因为我不想复制我的Iloggers。但是,当必须共享对象时,使用值是否安全?也许我应该使用指针(聪明与否)将myLogger
放入堆中而不是堆栈中?您有什么看法,是否有可能保持“价值语义”?