C或C ++中的结构实例限制

时间:2013-12-09 12:52:55

标签: c++ c struct

struct student{
    char name[20];
    in roll;
};

int main()
{
    struct student s1;
}

我们可以将结构实例限制为只有一个。 即如果我们写struct student s1,s2;,那么它应该给出错误。 这意味着应该允许struct student s1;。 我们可以用c或c ++这样做吗;

3 个答案:

答案 0 :(得分:5)

  

我们可以将结构实例限制为只有一个吗?

当然你可以:不创建另一个实例。


限制类的实例数通常不是您想要的。 不,你shouldn't use the Singleton pattern

答案 1 :(得分:1)

答案取决于语言(您标记了CC++)。

C中,如果结构定义已知,则不可能。您可能能够实现一个封装模块,其中只公开指向结构的指针,但这样的实现可能相当有限。对于插件系统,这可能是有用的。

C++中,您可以通过Singleton模式隐式执行此操作。但是,这不会阻止您拥有多个变量,如示例所示,它只能确保所有这些变量都使用相同的实例。它也没有错误,至少没有编译错误。您可以抛出运行时错误。

答案 2 :(得分:0)

是。您可以将类结构创建为类似于类的单例。 考虑以下示例:

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;
    }
}

当然,如果您不想在第二次创建时返回指向现有实例的指针,则可以实现一些异常抛出/其他错误消息。