我这样做是为了在所有神经元之间共享learning_rate
:
class neural_network
{
public:
neural_network(float learning_rate = 0.005f)
: learning_rate(new float(learning_rate)) {};
shared_ptr<float> learning_rate;
private:
vector<neuron> neurons;
}
class neuron
{
public:
neuron(const float learning_rate)
{
this->learningRate = make_shared<float>(learningRate);
};
private:
const shared_ptr<const float> learning_rate;
}
在我所有的神经元上都具有相同的learning_rate
是一个很好的解决方案吗?
shared_ptr
相当昂贵,我在这里看不到它的需要,只有网络需要“拥有”学习率。不要害怕在适当的地方使用原始指针,只需避免使用new
和delete
:
class neuron {
public:
neuron(const float& learning_rate)
: learning_rate(&learning_rate){};
private:
const float* learning_rate;
};
class neural_network {
public:
neural_network(float learning_rate = 0.005f)
: learning_rate(learning_rate){};
float learning_rate;
void make_neuron()
{
neurons.push_back(neuron(learning_rate));
}
private:
vector<neuron> neurons;
};
shared_ptr
是共享所有权,而不是“共享实例”。
[某些实例X
的生存期与其成员之间存在良好定义的关系。在最简单的情况下,成员将一直存活直到在X
的析构函数中将其销毁为止。成员通常在X
的生存期内不会存活。因此,不需要共享所有权。您可以使用原始指针来强调neurons
不参与learning_rate
的所有权。