控点是用于识别受操作影响对象的抽象对象(比特马普、插座、文件、内存等)的标识符: HBITMAP
, socket
, FILE/code>是控点的示例 -- -- 它们实际上是在操作系统中某个表格或地图中代表索引的整数。
严格地说,指针是记忆中的确切位置。 虽然指针有时被用作把手,但反之(如果曾经)却很少是真实的。
在对象导向环境中,控件被视为低级别实体,用使用指定控件来调用操作的方法在对象中包装控件是一种良好做法。在这种情况下,您可以参考一个持有控件的物体,例如:CBitmap
,System.Net.Sockets.Socket
,std::fstream
等。
有些人会认为其中之一更干净、更安全、更快、更简单。这几乎总是取决于你所处的环境。如果你有选择的话,你不应该直接在C#中使用手柄,而在C中,使用手柄会更简单(和必要)。
< 强度 > 进口注释 < / 强度 > : 在.Net environment 中, 如果您需要重新排列的话, 您将最终读取一些关于实际对象引用被命名为控点的东西。 这是因为它们实际上是在顶罩下而不是指针下操作的。 所以当您在一个对象上调用一种方法时, 编译者实际上是在将一个带有控点的方法调用到一个可以在记忆中自由移动的对象上。 这样可以让垃圾收集器避免记忆破碎。 因此, 使用一个 < code> System.drawing. Bitmap 你最终会用一个指点到一个手 。
<强度 > EDIT:
C++中的示例、标准流/流:
// Read a short line from a file and output it to the console
// 256 bytes max for simplicity purposes
char buffer[256];
// With handle
FILE* file = fopen ("file.txt" , "r");
fgets(buffer, 256 , file);
std::cout << buffer << std::endl;
fclose (file);
// With object reference
{
std::ifstream stream ("file.txt");
stream.getline(buffer, 256);
std::cout << buffer << std::endl;
}
顶级示例对文件使用“ 控点” 。 < code> file 控点使用 < code> fopen 分配, 并传递给操作, 如 < code> fgets ()
和 < code> close () 。 < code> close () 处理控点 。
底示例使用 < code>std:: Ifstream 。 控件在对象构造器中分配, 并且是该对象的内部。 要在文件中操作, 您需要使用该对象提供的方法, 如 < code> gigline () 。 当天体超出范围时, 即关闭括号, 或者如果天体被分配在堆积上, 您需要明确删除它 。