相关疑难解决方法(0)

删除默认类构造函数有什么意义?

我正在准备我的CPP考试,其中一个问题是:你能否删除默认的类构造函数,如果是,那么这样做的原因是什么?好的,显然你可以这样做:

class MyClass 
{ 
  public: 
    MyClass() = delete; 
};
Run Code Online (Sandbox Code Playgroud)

但我不明白你为什么要这样做?

c++ default-constructor

50
推荐指数
4
解决办法
6609
查看次数

禁止在派生类C++中使用默认构造函数

有没有办法创建基类(如boost :: noncopyable)并从中继承,如果它不是由用户(开发人员)制作的,它将禁止编译器为派生类生成默认构造函数?

例:

class SuperDad {
XXX:
  SuperDad(); // = delete?
};

class Child : YYY SuperDad {
public:
  Child(int a) {...}
};
Run Code Online (Sandbox Code Playgroud)

结果:

int main () {
  Child a;     // compile error
  Child b[7];  // compile error
  Child c(13); // OK
}
Run Code Online (Sandbox Code Playgroud)

c++ inheritance constructor default-constructor

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

识别和跟踪无用的复制

C++ 中对性能的很多关注是减少无用的复制。

该语言本身带有许多在这方面有所帮助的不错的功能,包括移动语义、完美转发等。

有时很难看到无用的副本。

此外,其中一些副本可以通过在错误的时间强制转换或分配给错误的类型来制作,这最终会很昂贵,尤其是在使用惰性求值库时。

除了测量时间性能并仔细查看似乎慢得令人怀疑的代码之外,还有没有更好的方法来避免这些问题?也许某种形式的内存基准测试程序?

c++

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

C++ 11 Destructor = delete

我在这里看到了一个构造函数=删除解释,但我想知道我是否应该禁止析构函数调用.我正在尝试使用这样的类:

class A
{
public:
    static bool foo(const char* filePath);
    static void foo(const int something);
private:
    A() = delete;
    ~A();
};
Run Code Online (Sandbox Code Playgroud)

我也应该这样写~A() = delete;吗?它甚至重要吗?

c++ destructor c++11

6
推荐指数
2
解决办法
2499
查看次数

(C ++)使类静态化时有什么更好的方法:将构造函数设置为私有或公开删除?

我目前正在使用一个类,希望整个程序中的成员相同。因此,我需要禁用此类的构造函数。最好的方法是什么?


  1. 声明构造函数为私有
  2. constructor()=删除;

c++ constructor c++11

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