相关疑难解决方法(0)

哪些Boost功能与C++ 11重叠?

几年前我把我的C++技能放在架子上,现在看来,当我再次需要它们时,景观已经改变了.

我们现在有了C++ 11,我的理解是它与许多Boost功能重叠.

是否存在这些重叠的摘要,哪些Boost库将成为遗产,推荐哪些C++ 11功能使用而不是增强哪些,哪些更好?

c++ boost c++11

188
推荐指数
2
解决办法
4万
查看次数

禁用复制构造函数

我有一节课:

class SymbolIndexer {
protected:
  SymbolIndexer ( ) { }

public:
  static inline SymbolIndexer & GetUniqueInstance ( ) 
  { 
    static SymbolIndexer uniqueinstance_ ;
    return uniqueinstance_ ; 
  }
};
Run Code Online (Sandbox Code Playgroud)

我该如何修改它以禁用如下代码:

SymbolIndexer symbol_indexer_ = SymbolIndexer::GetUniqueInstance ( );
Run Code Online (Sandbox Code Playgroud)

并且只允许以下代码:

SymbolIndexer & ref_symbol_indexer_ = SymbolIndexer::GetUniqueInstance ( );
Run Code Online (Sandbox Code Playgroud)

c++ copy-constructor

156
推荐指数
2
解决办法
11万
查看次数

使用C++ 11中显式删除的成员函数,是否仍然值得从不可复制的基类继承?

使用C++ 11中显式删除的成员函数,是否仍然值得从不可复制的基类继承?

我在谈论私有继承基类的技巧,该基类具有私有或删除的复制构造函数和复制赋值(例如boost::noncopyable).

这个问题提出的优势是否仍适用于C++ 11?


我不明白为什么有些人声称在C++ 11中使类不可复制更容易.

在C++ 03中:

private:
    MyClass(const MyClass&) {}
    MyClass& operator=(const MyClass&) {}
Run Code Online (Sandbox Code Playgroud)

在C++ 11中:

MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
Run Code Online (Sandbox Code Playgroud)

编辑:

正如许多人所指出的那样,为私有拷贝构造函数和拷贝赋值运算符提供空体(即{})是错误的,因为这将允许类本身调用那些运算符而没有任何错误.我首先开始没有添加{},但遇到了一些链接器问题,这些问题让我添加{}有些愚蠢的原因(我不记得这些情况).我知道更清楚.:-)

c++ noncopyable c++11

58
推荐指数
4
解决办法
3万
查看次数

通过构造函数进行依赖注入的最佳实践

控制反转是一种价值证明技术,用于模块化系统并使组件彼此分离.

低耦合始终是一个优势:它简化了组件的自动测试,使代码更符合单一责任原则.

在申报依赖于另一个类(方式服务定位,物业注入调用的公共方法/设置一个公共属性...),构造注入似乎是最好的办法.

虽然它可能是最难实现的(至少来自列出的三个),但它具有显着的优势:

  • 使用构造函数签名可以真正看到所有依赖项;
  • 由于实例化的定义良好,因此不会发生循环依赖.

C++提供的许多选择通过构造函数执行注入的优缺点是什么?

c++ dependency-injection inversion-of-control constructor-injection

6
推荐指数
1
解决办法
6360
查看次数

什么是在C++ 03中模拟=删除以限制复制/赋值操作的最简单方法?

C++ 11通过允许您使用"= delete"语法将隐式编译器定义的方法标记为verboten来解决长期困扰我的问题. 维基百科了解更多信息.

class Foo
{
public:
     Foo();
    ~Foo();

    // No copy
    Foo(Foo const &) = delete;
    Foo& operator=(Foo const &) = delete;
};
Run Code Online (Sandbox Code Playgroud)

我不希望复制或分配的类的复制和赋值运算符总是很难搞乱.这是一个很大的锅炉板代码,使它们成为私有的,然后通常会有成员数据,没有一个默认的构造函数,需要一些挥手让编译器对你想要没有人调用的函数感到高兴.

class Bar
{
public:
   explicit Bar(UniqueResourceID id): m_data(id) { }
   ~Bar();

protected:
   SomeHandle  m_data; // no default constructor

// all this crap to keep from being able to copy.  Do not use any of these!!
private:
   Bar() { } // ERROR: m_data has no default constructor
   static UniqueResourceID s_invalidID; // now I'm making the …
Run Code Online (Sandbox Code Playgroud)

c++ copy-constructor c++03 c++98

3
推荐指数
1
解决办法
304
查看次数

删除复制构造函数的通用宏,给定类的赋值运算符

有没有办法创建一个通用宏来删除复制构造函数,赋值运算符

    //Below two lines are class specific, and looking to replace with some generic way
    //without mentioning hardcoded class name
    #define NO_COPY             Original(_In_ const Original&) = delete;
    #define NO_ASSIGNMENT       Original& operator=(_In_ const Original&) = delete;
    
    //simple class
    class Original
    {
    public:
        NO_COPY;
        NO_ASSIGNMENT;
    };
Run Code Online (Sandbox Code Playgroud)

c++

1
推荐指数
1
解决办法
41
查看次数