C++ C或C+中的结构实例限制+;
我们可以将结构实例限制为仅一个。 i、 e.如果我们写C++ C或C+中的结构实例限制+;,c++,c,struct,C++,C,Struct,我们可以将结构实例限制为仅一个。 i、 e.如果我们写struct student s1,s2,则应给出错误。 这意味着struct student s1应该是允许的。 我们能在C或C++中这样做吗? 是的。您可以以类样式作为单例创建结构。 考虑下面的例子: struct student{ char name[20]; in roll; }; int main() { struct student s1; } 当然,如果您不想在第二次创建时返回指向现有实例的指针,您可
struct student s1,s2代码>,则应给出错误。
这意味着struct student s1代码>应该是允许的。
我们能在C或C++中这样做吗? 是的。您可以以类样式作为单例创建结构。
考虑下面的例子:
struct student{
char name[20];
in roll;
};
int main()
{
struct student s1;
}
当然,如果您不想在第二次创建时返回指向现有实例的指针,您可以在那里实现一些异常抛出/其他错误消息。答案取决于语言(您标记了C
和C++
)
在C
中,如果结构定义已知,则不可能。您可能能够实现一个只暴露指向结构的指针的封装模块,但这样的实现可能相当有限。对于插件系统,这可能是有用的
在C++
中,您可以通过Singleton
模式隐式执行此操作。但是,这不会阻止您拥有多个变量,如示例所示,它只会确保所有这些变量都使用同一个实例。它也不会出现错误,至少不会出现编译错误。不过,您可能会抛出运行时错误
我们可以将结构实例限制为仅一个吗
当然可以:不创建另一个实例
限制类的实例数量通常不是您想要的。
不,完全是你。你要找的术语是“单身”。有很多方法可以实现这样的目标,但你可能不想。为什么要这样做?对名为“student”的结构进行此限制似乎有些奇怪,但singleton(正如molbdnilo所说)是您要寻找的对象。在C.@OliCharlesworth anonymous struct中无法实现这一点?singleton&GetInstance(){static singleton instance;return instance;}
是编写单例的惯用且正确的方法。@Simple我见过几十个单例,我从未听说过这种“正确的方法”,你能给我指一些文献吗?如果使用C++11支持的编译器,=delete如果你使用C++11只是=delete
函数,你想让它们不可用(或者至少让它们没有实现,这样它们就不能被调用),那么code>比声明ctors&co private更好。@NiRR:这是Meyer的单例,在C++11中甚至是线程安全的。你可以将构造函数设为private
,使用单例生成函数afriend
。但不要说这是个好主意。
struct Singleton
{
private:
static Singleton * instance;
Singleton()
{
}
Singleton(const Singleton & source)
{
// Disabling copy-ctor
}
Singleton(Singleton && source)
{
// Disabling move-ctor
}
public:
Singleton * GetInstance()
{
if (instance == nullptr)
instance = new Singleton();
return instance;
}
}