小编Raj*_*pal的帖子

为什么在C++中为单例类重载复制赋值运算符?

我知道为什么要使默认构造函数和复制构造函数私有在C++中实现singleton类.但我不明白的是,为什么复制赋值运算符是私有的,因为不会有两个现有的对象开始.

我的探索带来两点:

  1. 根据Alexandrescu在"现代C++设计"中的说法,赋值运算符是私有的,以防止自我赋值.

  2. 其次,根据三条规则,如果你为一个类定义一个ctor,copy ctor和assignment操作符,你应该明确定义所有三个.那么,这只是遵循这条规则的问题.

那么,你对此有何看法?

c++ design-patterns

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

根据条件写入注册表

我想根据操作系统写入注册表。我有操作系统检测功能,发现你可以在注册表部分放置一个检查功能,所以尝试了以下操作:

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)

任何想法/建议?

inno-setup

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

你看到这个C++代码有什么问题吗?

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. func仅在A类对象上运行,应该成为A的成员.
  2. 应该在堆栈而不是堆上创建类A的对象.

还有其他想法吗?

c++

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

给定未排序的数组,找到i,j,使得线性时间和常数空间中的i <j和A [i] <A [j]

例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循环解决了它.

arrays algorithm data-structures

-2
推荐指数
1
解决办法
188
查看次数