假设我有一个类,它通过映射中的代理类存储对派生类成员变量的引用。此地图填充在名为let foo()
的函数中。它可能看起来像这样:
#include <map>
#include <memory>
class property_base
{
};
template<typename T>
class property : public property_base
{
public:
property(T& property) : property_(property)
{
}
private:
T& property_;
};
template<typename T>
class base
{
public:
base()
{
static_cast<T*>(this)->foo();
}
protected:
std::map<std::string, std::unique_ptr<property_base>> properties_;
};
class derived : public base<derived>
{
public:
void foo()
{
properties_.emplace("member", std::unique_ptr<property_base>(new property<int>(value_)));
}
private:
int value_;
};
我知道这不是一个好的模式,因为我做了一件坏事 - 在运行构造函数之前访问派生类成员变量,但我只存储引用,所以我不会弄乱这个起来并开始用它们做任何事情这应该没问题。也就是说,是否存在我忽略的任何案例/场景,并且调用foo()
只会将引用存储在地图中会导致任何错误?