小编NDe*_*iny的帖子

为什么C++中的new不会在失败时返回NULL

为什么不new返回NULL失败?为什么它只在失败时抛出异常?

因为它在成功时返回指向对象的指针,为什么不在失败时呢?这种行为有什么具体原因吗?

c++

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

通过工厂设计模式从客户端隐藏新的优势是什么?

我最近看过工厂设计模式,因为他提到了正常方法中的一个问题

*需要在客户端类中使用new关键字.

因此,通过使用工厂,我们已经实现了这一点(客户端不使用新的).但是从客户端隐藏新东西有什么好处?

一个问题是当客户端使用新的关键字时,他负责删除该内存.如果我们也使用工厂,我们仍然需要这样做,当客户端在最后创建一个对象时,客户端必须删除它(工厂不会删除它们).

我理解,其他优点,如重用现有代码,无需更改客户端代码.但是我对从客户端隐藏新(甚至是类)所取得的成果感到困惑.

提前致谢.

c++ design-patterns factory-pattern

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

对于pre-c ++ 11编译器,返回本地静态对象线程是安全的

这个单例线程对于前C++ 11编译器是否安全?正如我们对C++ 11所知,它是线程安全的.

class Singleton
{
private:
   Singleton(){};

public:
   static Singleton& instance()
   {
      static Singleton INSTANCE;
      return INSTANCE;
   }
};
Run Code Online (Sandbox Code Playgroud)

c++ singleton multithreading c++11

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

多重继承

我有2个基类(B1和B2),它们是从公共基类(B)派生出来的,它们有一个公共变量(let:int x;来自基数B),在第一个基数中x=0,在第二个基数中x=10(默认值在B1中给出, B2构造函数).

视觉:

class B
{
    int x;

protected:

    B(int x) : x{x}{}
};

class B1 : public B
{
protected:

    B1() : B(0){}
};

class B2 : public B
{
protected:

    B2() : B(10){}
};
Run Code Online (Sandbox Code Playgroud)

现在,如果我再推导一个类:

class D : virtual public B1, virtual public B2
{
public:

    D() : B1{}, B2{}{}
};
Run Code Online (Sandbox Code Playgroud)

这里只有一个x的副本可用于虚拟概念,现在如果我尝试使用派生类对象访问x值,那么x的实例将在O/p(x=0x=10)中得到,为什么?

c++ multiple-inheritance

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

我可以使用extern"C"{headerfile of c}

而不是在" extern "C" {}" 中写入每个函数,我可以在该块内写入整个头文件.

extern "C"
{
  #include "myCfile.h" 
} 
Run Code Online (Sandbox Code Playgroud)

我试过这个,但它根本不工作,为什么它不起作用?如果我们必须在c ++项目中使用100 C函数,我们是否需要提供extern块中的所有函数,还有其他简单的方法吗?

例如:

extern "C"
{
 void fun1();
 void fun2();
 void fun3();
 void fun4();
 void fun5();
 .
 .
 .
 .
 fun100();
}
Run Code Online (Sandbox Code Playgroud)

有没有其他简单的方法,如extern "C" { myCfunctions.h }???

c c++ linkage

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

C++ 结构体与类在内存方面的比较

我最近在一次采访中遇到了一个问题。

C++ 结构体和类在内存方面有什么区别?

我知道它们在所有方面都是相同的,除了继承时的访问说明符&在成员变量的情况下。

除此之外,内存方面是否存在真正的差异(可能是内存分配或销毁或内存管理等)???

编辑:我不太确定为什么面试官在没有区别的情况下问这个问题。我在这里发现了类似的问题 ,请参阅该链接的第二条评论,他问了同样的问题,但没有答案。我想应该是有区别的。

提前致谢。

c++ struct class

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

有没有办法在'if'条件下用>替换字符串">"?

我遇到了以下用例,但我找不到合适的解决方案.有没有办法用条件来代替字符串"<"或">" <>if条件?

例:

  string condition = "<";
  if (10 condition 8)   // Here I want to replace condition with <
  {
      // Some code
  }
Run Code Online (Sandbox Code Playgroud)

我不想这样做:

if ("<" == condition)
{
   if (10 < 8)
   {
   }
}
else if (">" == condition)
{
   if (10 > 10)
   {
   }
}
Run Code Online (Sandbox Code Playgroud)

而且我的病情会在运行期间发生变化.如果存在于上面,我只是在寻找一种简单的方法.

使用案例:用户将提供如下查询:

input: 10 > 9   =>  output: true
input: 10 < 7   =>  output: false
Run Code Online (Sandbox Code Playgroud)

基本上我需要解析这个查询,因为我将这3个单词(10,>,9)作为字符串,并且我想以某种方式将字符串">"或"<"转换为实际符号><.

c++

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

生成DLL时.lib文件包含什么

我正在 Visual Studio 2010 中生成 .dll。.lib、.dll、.pdb 文件在输出文件夹中生成。

  1. 为什么.lib(是静态lib吗?)与dll一起生成,它有什么用处以及它实际上包含什么?
    (在 Linux 中,除了 .so 之外,它不能有任何其他文件,但为什么在 Windows 中)。

  2. 这个 .pdb 文件是什么,它包含什么以及它有什么用处?

提前谢谢:)

c++ dll

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

批量延迟扩展无法按预期工作

我在下面写了示例批处理脚本,变量COUNT正在更新但不知何故MY_ROOT没有得到更新,我在这里遗漏了什么?

@echo off
setlocal ENABLEDELAYEDEXPANSION
set MY_ROOT= C:\
set COUNT=0

if 1 == 1 (  
  set MY_ROOT = D:\ 
  echo MY_ROOT = !MY_ROOT!

  set /A COUNT=10 
  echo Count = !COUNT!
)
:end

**o/p:**
MY_ROOT =  C:\
Count = 10
Run Code Online (Sandbox Code Playgroud)

谢谢.

batch-file

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