TL; DR:是否存在类似于std::unique_ptr
的智能指针类的实现,该类仅实例化封装的对象并在首次取消引用指针时分配内存?
背景:
我们有一个表示正在运行的进程的Process
类。当进程执行网络通信时,我们记录该活动并将其存储在作为NetworkActivity
类成员的Process
类对象中。
NetworkActivity
是具有许多成员变量的大型类。我试图减少内存使用并仅对实际上通过网络进行通信的一小部分进程实例化NetworkActivity
对象。
我当然可以在unique_ptr
类中使用Process
:
std::unique_ptr<NetworkActivity> networkActivityPtr;
但是我每次取消引用networkActivityPtr
时都需要检查nullptr
。如果我忘记了这样的检查并且尚未分配内存,程序将崩溃。
当第一次取消智能指针的引用时,unique_ptr
是否没有构造该对象的变体?
答案为否。参见:Dr. Dobbs article。您将需要编写自己的包装器。
但是,当您的进程首次启动时,其初始化代码将创建该实例。