c++ - 使用 shared_ptr 在类及其成员对象之间共享变量是一个好的解决方案吗?

标签 c++ smart-pointers

我这样做是为了在我所有的神经元之间共享 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 相当昂贵,我认为这里没有必要,只有网络需要“拥有”学习率。不要害怕在适当的地方使用原始指针,只要避免 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;
};

关于c++ - 使用 shared_ptr 在类及其成员对象之间共享变量是一个好的解决方案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59139769/

相关文章:

c++ - 如何为 std::multimap 的给定键获取 "previous"项的迭代器(或值)?

c++ - 霸气C++游戏

c++ - 我自己的智能指针,double free or corruption (fasttop)

delphi - 在函数中使用 SmartPointer 作为结果数据类型需要显式调用调用

c++ - [bazel] restricted_to 属性的使用

c++ - 在 C、C++ 中控制 Windows 服务

c++ - 与遗留 TCHAR 代码接口(interface)的正确样式

c++ - shared_ptr 完全在栈上

c++ - 抛出析构函数导致内存泄漏

c++ - 使用自己的继承类初始化 vtkSmartPointer