【问题标题】:C++ Static variable accessible by class member类成员可访问的 C++ 静态变量
【发布时间】:2014-04-25 05:22:23
【问题描述】:

请看下面的代码:

#include<string>
class abc
{
  public:
    static const abc PENDING;
  private:
    static const string PENDING_STATUS_CD;
    abc ( const string& iStatus )
    {
     //...........
     Logintodatabase();
     //.............
     logoutfromdatabase();

    }
};

const string abc::PENDING_STATUS_CD  = "P";
const abc abc::PENDING ( abc::PENDING_STATUS_CD );

一旦 const abc abc::PENDING( abc::PENDING_STATUS_CD );被调用,它会调用构造函数abc ( const string&amp; iStatus )

事实上,如果在类内部定义了多个静态类变量,则每次初始化都会调用构造函数。

这个构造函数负责打开和关闭数据库。
对于每个静态变量初始化,数据库将打开和关闭。
假设这个类被多个进程使用,那么数据库将打开和关闭很多次。

您能建议如何解决这个问题吗?

谁能告诉我如何设计这个逻辑?

【问题讨论】:

  • 您要求解决方案,但问题仍然有点不清楚。请您编辑问题以详细说明问题。

标签: c++


【解决方案1】:

数据库是一个依赖项。从外部传递它,也许在构造函数中。假设它已经打开,让你的类的调用者担心打开、关闭或缓存连接。

在技术层面上,如果您不想进行依赖注入,请为您各自的数据库查找 connection pooling

【讨论】:

  • 是不是真的,一旦下面的行将调用它会调用构造函数?常量 abc abc::PENDING ( abc::PENDING_STATUS_CD );
  • 我们是否可以进行任何设计,使所有静态变量都变为非静态变量。或者对我的新设计有什么影响?
  • 你应该以某种方式设计它,你的构造函数的逻辑以某种方式被注入,所以你可以把它放在另一个地方,然后可以决定缓存。
  • 这些是静态变量,我们可以使其成为非静态或设计逻辑。假设如果我在做非静态的事情需要注意什么,你能解释清楚吗?
  • 如果期望不明确,就很难解释清楚。你应该在一本好书或教程中查找Dependency Injection 和可能(尽管我认为这是一种反模式)Singleton 模式。
猜你喜欢
  • 1970-01-01
  • 2020-01-27
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多