我知道为什么要使默认构造函数和复制构造函数私有在C++中实现singleton类.但我不明白的是,为什么复制赋值运算符是私有的,因为不会有两个现有的对象开始.
我的探索带来两点:
根据Alexandrescu在"现代C++设计"中的说法,赋值运算符是私有的,以防止自我赋值.
其次,根据三条规则,如果你为一个类定义一个ctor,copy ctor和assignment操作符,你应该明确定义所有三个.那么,这只是遵循这条规则的问题.
那么,你对此有何看法?
我想根据操作系统写入注册表。我有操作系统检测功能,发现你可以在注册表部分放置一个检查功能,所以尝试了以下操作:
Root: HKLM; SubKey: Software\Microsoft\Windows; ValueType: dword; ValueName: Test; ValueData: 1; Flags: createvalueifdoesntexist; Check: IsWindows7
Run Code Online (Sandbox Code Playgroud)
但它不起作用,这意味着当我在 Win7 和 WinXP 上安装时,它在两种情况下都将值写入注册表。
这是检测操作系统的代码:
function IsWindows7(): Boolean;
var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
// Windows 7 version is 6.1 (workstation)
if (Version.Major = 6) and
(Version.Minor = 1) and
(Version.ProductType = VER_NT_WORKSTATION)
then
Result := True
else
Result := False;
end;
Run Code Online (Sandbox Code Playgroud)
任何想法/建议?
class A
{
public:
A(){}
~A(){}
void DoSomething(int x){}
};
void func(int i)
{
A *pa = new A();
pa->DoSomething(i);
delete pa;
}
Run Code Online (Sandbox Code Playgroud)
你们看到这个代码有什么问题吗?我只能看到以下两点:
还有其他想法吗?
例1:
输入:5 4 3 2 1
输出:无
例2:
输入:5 4 3 2 6 1
输出:0,4(索引)
请建议一种算法来找到这样的索引i,j,即线性时间和恒定额外空间中的i <j和A [i] <A [j].我O(n^2)用2 for循环解决了它.