在这些关于C++ 11/14标准的幻灯片中,在幻灯片15中,作者写道"C++ 11中的许多经典编码规则不再适用".他提出了三个例子清单,我同意三条规则和内存管理.
然而他的第二个例子是"虚拟析构函数与虚拟成员"(就是这样).这是什么意思?我知道必须声明为基类析构函数的虚拟,以便在我们有类似的东西时调用正确的析构函数
Base *b = new Derived;
...
delete b;
Run Code Online (Sandbox Code Playgroud)
这里有很好的解释:什么时候使用虚拟析构函数?
但是,如果你有虚拟成员,现在在C++ 11中声明虚拟你的析构函数是没用的吗?
在http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/中,它提到"最重要的const",其中C++故意指定绑定临时对象在堆栈上引用const会延长临时生命周期到引用本身的生命周期.我想知道为什么c ++只允许在引用为const时延长对象的生命周期而不是在不引用时延长对象的生命周期?这个特征背后的理性是什么?为什么它必须是const?
我看到HotSpot JVM中实现了六种线程类型:VMThread,CGCThread,PGCThread,JavaThread,CompilerThread和WatcherThread.但是我不知道哪种线程类型正在做什么.这是我到目前为止所理解的:
其他问题:其他JVM怎么样?
我想知道动态调度在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) 这是我在学生时问自己的问题,但未能得到令人满意的答案,我一点一点地想到了......直到今天.
我知道我能应付分配内存错误或者通过检查,如果返回的指针为NULL或处理bad_alloc异常.
好的,但我想知道:新的召唤怎么以及为什么会失败?据我所知,如果免费商店中没有足够的空间,分配内存可能会失败.但是,这是否真的情况发生时下,有几个GB的RAM(至少在普通电脑上,我说的不是嵌入式系统)?我们可以在其他情况下发生分配内存故障吗?
我正在使用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#库,用户需要编写他/她自己的类,这些类继承自库中的给定类.我不认为编写更多细节会有所帮助,所以即使我要求的内容看起来很奇怪,也请考虑它.
在一个类中,我想要以下行为:两个互斥的" abstract
"方法,如果实现一个,那么就不需要实现另一个(所以正确,它们不是真的abstract
).
我需要强制用户实现这些方法中的至少一种,因此virtual
仅声明这两种方法是不够的.实际上我可以声明两者abstract
,但这意味着用户应该实现一个永远不会被调用的方法,当然我想避免这种情况.
是否有一个技巧或C#成语来做一些接近我想要的东西?也许有一些反思技巧我几乎一无所知?