正在使用shared_ptr在类及其成员对象之间共享变量吗?

问题描述 投票:0回答:2

我这样做是为了在所有神经元之间共享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是一个很好的解决方案吗?

c++ smart-pointers
2个回答
2
投票

shared_ptr相当昂贵,我在这里看不到它的需要,只有网络需要“拥有”学习率。不要害怕在适当的地方使用原始指针,只需避免使用newdelete

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;
};

0
投票

shared_ptr是共享所有权,而不是“共享实例”。

[某些实例X的生存期与其成员之间存在良好定义的关系。在最简单的情况下,成员将一直存活直到在X的析构函数中将其销毁为止。成员通常在X的生存期内不会存活。因此,不需要共享所有权。您可以使用原始指针来强调neurons不参与learning_rate的所有权。

© www.soinside.com 2019 - 2024. All rights reserved.