【发布时间】:2011-01-07 04:16:46
【问题描述】:
我大部分时间只使用 C,但在 C++ 中遇到了一些不熟悉的问题。
假设我在 C 中有一些这样的函数,这将是非常典型的:
int some_c_function(const char* var)
{
if (var == NULL) {
/* Exit early so we don't dereference a null pointer */
}
/* The rest of the code */
}
假设我正在尝试用 C++ 编写一个类似的函数:
int some_cpp_function(const some_object& str)
{
if (str == NULL) // This doesn't compile, probably because some_object doesn't overload the == operator
if (&str == NULL) // This compiles, but it doesn't work, and does this even mean anything?
}
基本上,我要做的只是防止在使用 NULL 调用 some_cpp_function() 时程序崩溃。
使用 C++ 对象执行此操作的最典型/最常见的方法是什么(不涉及重载
==运算符)?这是正确的方法吗?也就是说,我不应该编写将对象作为参数的函数,而是编写成员函数吗? (但即便如此,请回答原问题)
在采用对象引用的函数或采用 C 风格指针指向对象的函数之间,是否有理由选择一个而不是另一个?
【问题讨论】:
-
这是个好问题。很遗憾,大多数回答的人都不明白你在问什么。我认为 Nilesh 提供了正确的答案;而且我相当肯定它即使在跨越应用程序/共享对象边界时也能工作如果共享对象导出空对象。