首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有新运算符的类中的静态成员变量

带有新运算符的类中的静态成员变量
EN

Stack Overflow用户
提问于 2017-08-24 06:54:46
回答 1查看 1.3K关注 0票数 3

我可以在C++中使用new声明静态数据成员吗?如果我们可以用new声明静态数据成员,那么如何初始化该静态数据成员呢?

代码语言:javascript
运行
复制
class A
{ 
    static int *p = new int;     
}

int * A :: p = 
EN

回答 1

Stack Overflow用户

发布于 2017-08-24 07:06:52

方法是在类中声明变量并在其外部初始化它:

代码语言:javascript
运行
复制
class A {
public:
  static int* anIntPointer; //<- declaration
};

int* A::anIntPointer = new int(42); //<- initialisation

但是,您仍然需要手动清除该内存,因为当程序结束时,指针将被移除,但它所指向的内存仍将保留(除非您的操作系统跟踪内存并在程序结束后清理)。所以打电话给delete A::anIntPointer,例如在main的末尾。

但是,如果您确实可以访问C++17,则可以声明inline成员,inline允许您直接初始化它。

代码语言:javascript
运行
复制
class A {
public:
  inline static int* anIntPointer = new int(42); //<- declaration + initialisation
};

无论如何,如果您不想自己负责清理内存,可以使用智能指针(std::auto_ptr<>优先C++11、std::unique_ptr<> C++11和后续)。

代码语言:javascript
运行
复制
class A {
public:
  static std::unique_ptr<int> anSmartPointer;
};

std::unique_ptr<int> A::anSmartPointer = std::unique_ptr<int>(new int(42)); // C++11
// std::unique_ptr<int> A::anSmartPointer = std::make_unique<int>(42); // or C++14 style

A::anSmartPointer在程序结束时被销毁时,它会自动清除它控制的内存。

https://wandbox.org/permlink/oEux7zIaC9gizsPy,您可以看到我刚才解释的所有内容的工作示例以及其他一些事情(比如C++17 inline static智能指针)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45854854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档