【发布时间】:2014-01-21 21:14:49
【问题描述】:
我找不到对此给出明确答案的线程 -
我有一个构造函数,例如:
FanBookPost::FanBookPost(Fan* owner, std::string content);
Fan 是我代码中的另一个类,但内容是有问题的:
因为 std::string 不是指针,我希望用 (fan, nullptr) 调用构造函数是不可能的。但是,它编译! ...并在运行时使用 EXC_BAD_ACCESS 崩溃。
这是可以避免的吗?
【问题讨论】:
-
如果您真的想要,您可以使用
const char *版本重载它,如果不为空则转发。 -
调用
std::string构造函数时会发生崩溃,这不是您的代码的问题。 -
你可以用一个接受
std::nullptr_t的函数来重载它。非空指针常量不会选择这个重载。 -
@dyp 虽然这不会阻止
char *c = 0; FanBookPost fbp(..., c);甚至FanBookPost fbp(..., 0);之类的事情。 -
@delnan
0是一个空指针常量。