小编rin*_*ng0的帖子

在C++中防止类继承

最近我的一位朋友问我如何在C++中阻止类继承.他希望编译失败.

我在考虑它并找到了3个答案.不确定哪个是最好的.

1)私人建设者

class CBase
{

public:

 static CBase* CreateInstance() 
 { 
  CBase* b1 = new CBase();
  return b1;
 }

private:

 CBase() { }
 CBase(CBase3) { }
 CBase& operator=(CBase&) { }


};
Run Code Online (Sandbox Code Playgroud)

2)使用CSealed基类,私有ctor和虚拟继承

class CSealed
{

private:

 CSealed() {
 }

 friend class CBase;
};


class CBase : virtual CSealed
{

public:

 CBase() {
 }

};
Run Code Online (Sandbox Code Playgroud)

3)使用CSealed基类,受保护的ctor和虚拟继承

class CSealed
{

protected:

 CSealed() {
 }

};

class CBase : virtual CSealed
{

public:

 CBase() {
 }

};
Run Code Online (Sandbox Code Playgroud)

以上所有方法都确保不能继承CBase类.我的问题是:

1)哪种方法最好?还有其他方法吗?

2)除非CSealed类是虚拟继承的,否则方法2和3将不起作用.这是为什么 ?它与vdisp ptr有什么关系吗?

PS: …

c++ inheritance controls

56
推荐指数
4
解决办法
4万
查看次数

提高高速文件复制的写入速度?

我一直在努力寻找编写文件复制例程的最快方法,将大文件复制到RAID 5硬件上.

平均文件大小约为2 GB.

有2个窗口框(都运行win2k3).第一个框是源,大文件位于何处.第二个盒子有一个RAID 5存储.

http://blogs.technet.com/askperf/archive/2007/05/08/slow-large-file-copy-issues.aspx

以上链接清楚地解释了为什么Windows复制,robocopy和其他常见的复制实用程序在写入性能方面受到影响.因此,我编写了一个C/C++程序,它使用带有NO_BUFFERING&WRITE_THROUGHflags的CreateFile,ReadFile和WriteFile API .该程序模拟ESEUTIL.exe,从某种意义上说,它使用2个线程,一个用于读取,一个用于写入.读取器线程从源读取256 KB并填充缓冲区.一旦填充了16个这样的256 KB块,写入器线程就会将缓冲区中的内容写入目标文件.如您所见,编写器线程在一次写入中写入8MB的数据.该程序分配32个这样的8MB块...因此,写入和读取可以并行发生.可以在上面的链接中找到ESEUtil.exe的详细信息.注意:我在使用时负责数据对齐问题NO_BUFFERING.

我使用像ATTO这样的台式标记实用程序,发现我们的RAID 5硬件在写入8MB数据块时的写入速度为每秒44MB.每分钟大约2.57 GB.

但我的程序每分钟只能达到1.4 GB.

任何人都可以帮我确定问题是什么?是否有更快的API的其他说CreateFile,ReadFile,WriteFile可用?

c++ windows raid copy

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

标签 统计

c++ ×2

controls ×1

copy ×1

inheritance ×1

raid ×1

windows ×1