我可以在C++中使用new声明静态数据成员吗?如果我们可以用new声明静态数据成员,那么如何初始化该静态数据成员呢?
class A
{
static int *p = new int;
}
int * A :: p = 发布于 2017-08-24 07:06:52
方法是在类中声明变量并在其外部初始化它:
class A {
public:
static int* anIntPointer; //<- declaration
};
int* A::anIntPointer = new int(42); //<- initialisation但是,您仍然需要手动清除该内存,因为当程序结束时,指针将被移除,但它所指向的内存仍将保留(除非您的操作系统跟踪内存并在程序结束后清理)。所以打电话给delete A::anIntPointer,例如在main的末尾。
但是,如果您确实可以访问C++17,则可以声明inline成员,inline允许您直接初始化它。
class A {
public:
inline static int* anIntPointer = new int(42); //<- declaration + initialisation
};无论如何,如果您不想自己负责清理内存,可以使用智能指针(std::auto_ptr<>优先C++11、std::unique_ptr<> C++11和后续)。
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智能指针)。
https://stackoverflow.com/questions/45854854
复制相似问题