我正在准备我的CPP考试,其中一个问题是:你能否删除默认的类构造函数,如果是,那么这样做的原因是什么?好的,显然你可以这样做:
class MyClass
{
public:
MyClass() = delete;
};
Run Code Online (Sandbox Code Playgroud)
但我不明白你为什么要这样做?
有没有办法创建基类(如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++ 中对性能的很多关注是减少无用的复制。
该语言本身带有许多在这方面有所帮助的不错的功能,包括移动语义、完美转发等。
有时很难看到无用的副本。
此外,其中一些副本可以通过在错误的时间强制转换或分配给错误的类型来制作,这最终会很昂贵,尤其是在使用惰性求值库时。
除了测量时间性能并仔细查看似乎慢得令人怀疑的代码之外,还有没有更好的方法来避免这些问题?也许某种形式的内存基准测试程序?
我在这里看到了一个构造函数=删除解释,但我想知道我是否应该禁止析构函数调用.我正在尝试使用这样的类:
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;吗?它甚至重要吗?
我目前正在使用一个类,希望整个程序中的成员相同。因此,我需要禁用此类的构造函数。最好的方法是什么?