小编Flo*_*oux的帖子

在C++ 11中使用虚拟成员的虚拟析构函数

在这些关于C++ 11/14标准的幻灯片中,在幻灯片15中,作者写道"C++ 11中的许​​多经典编码规则不再适用".他提出了三个例子清单,我同意三条规则和内存管理.

然而他的第二个例子是"虚拟析构函数与虚拟成员"(就是这样).这是什么意思?我知道必须声明为基类析构函数的虚拟,以便在我们有类似的东西时调用正确的析构函数

Base *b = new Derived;
...
delete b;
Run Code Online (Sandbox Code Playgroud)

这里有很好的解释:什么时候使用虚拟析构函数?

但是,如果你有虚拟成员,现在在C++ 11中声明虚拟你的析构函数是没用的吗?

c++ virtual-destructor c++11

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

为什么"最重要的const"必须是const?

http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/中,它提到"最重要的const",其中C++故意指定绑定临时对象在堆栈上引用const会延长临时生命周期到引用本身的生命周期.我想知道为什么c ++只允许在引用为const时延长对象的生命周期而不是在不引用时延长对象的生命周期?这个特征背后的理性是什么?为什么它必须是const?

c++ const

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

不同的(HotSpot)JVM线程类型有什么作用?

我看到HotSpot JVM中实现了六种线程类型:VMThread,CGCThread,PGCThread,JavaThread,CompilerThread和WatcherThread.但是我不知道哪种线程类型正在做什么.这是我到目前为止所理解的:

  • VMThread:运行垃圾收集器等VM任务.
  • CGCThread:并发垃圾收集器.
  • PGCThread:并行垃圾收集器(与CGC的差异?).
  • JavaThread:程序的线程,我想.
  • CompilerThread:编译器的一个线程?
  • WatcherThread:?

其他问题:其他JVM怎么样?

java multithreading jvm

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

在c ++中动态调度的规则是什么?

我想知道动态调度在C++中是如何工作的.为了说明我的问题,我将从一些Java代码开始.

class A
{
  public void op(int x, double y) { System.out.println("a"); }
  public void op(double x, double y) { System.out.println("b"); }
}

class B extends A
{
  public void op(int x, double y) { System.out.println("c"); }
  public void op(int x, int y) { System.out.println("d"); }
}

class C extends B
{
  public void op(int x, int y) { System.out.println("e"); }
}

public class Pol
{
  public static void main(String[] args)
  {
    A a = new C();
    B b = …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism

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

分配内存如何以及为何失败?

这是我在学生时问自己的问题,但未能得到令人满意的答案,我一点一点地想到了......直到今天.

我知道我能应付分配内存错误或者通过检查,如果返回的指针为NULL或处理bad_alloc异常.

好的,但我想知道:的召唤怎么以及为什么会失败?据我所知,如果免费商店中没有足够的空间,分配内存可能会失败.但是,这是否真的情况发生时下,有几个GB的RAM(至少在普通电脑上,我说的不是嵌入式系统)?我们可以在其他情况下发生分配内存故障吗?

c++ memory memory-management

7
推荐指数
3
解决办法
9318
查看次数

如何理解fdump-class-hierarchy输出

我正在使用fdump-class-hierarchy编译器选项,但我不知道如何理解输出."大小","对齐","基本大小"和"碱基对齐"是什么意思,以及这些是如何计算的?谢谢!

当代码是:

class A
{
public:

private:
    double m_nothing;
    int m_number;
};
Run Code Online (Sandbox Code Playgroud)

输出是:

Class A
   size=16 align=8
   base size=16 base align=8
A (0x406c690) 0
Run Code Online (Sandbox Code Playgroud)

但是,如果我稍微改变一下课程:

class A
{
public:

private:
    int m_number;
    double m_nothing;
};
Run Code Online (Sandbox Code Playgroud)

输出将是:

Class A
   size=16 align=8
   base size=12 base align=8
A (0x406c690) 0
Run Code Online (Sandbox Code Playgroud)

c++ class compiler-options

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

C#中的互斥抽象方法

我正在开发一个C#库,用户需要编写他/她自己的类,这些类继承自库中的给定类.我不认为编写更多细节会有所帮助,所以即使我要求的内容看起来很奇怪,也请考虑它.

在一个类中,我想要以下行为:两个互斥的" abstract"方法,如果实现一个,那么就不需要实现另一个(所以正确,它们不是真的abstract).

我需要强制用户实现这些方法中的至少一种,因此virtual仅声明这两种方法是不够的.实际上我可以声明两者abstract,但这意味着用户应该实现一个永远不会被调用的方法,当然我想避免这种情况.

是否有一个技巧或C#成语来做一些接近我想要的东西?也许有一些反思技巧我几乎一无所知?

c#

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