使用Direct2d时存在以下功能:
HRESULT WINAPI D2D1CreateFactory(
_In_ D2D1_FACTORY_TYPE factoryType,
_In_ REFIID riid,
_In_opt_ const D2D1_FACTORY_OPTIONS *pFactoryOptions,
_Out_ void **ppIFactory
);
当上述方法返回时,ppIFactory包含指向新工厂的指针的地址,因此可以使用该工厂。
我想做类似的事情,所以我在MessageLog.h中这样做:
void CreateMessageLog(MessageLog**);
class MessageLog{
public:
void PutToLog(WCHAR[]);
WCHAR* GetLog();
int GetLogLenght();
int GetnLogLines();
private:
WCHAR logHistory[MaxLogSize];
int nLogLines;
};
并将其放入MessageLog.cpp中:
void CreateMessageLog(MessageLog** ppMessageLog)
{
MessageLog mLog;
MessageLog* pmLog=&mLog;
ppMessageLog=&pmLog;
}
现在完成了,我有几个问题。首先,一旦CreateMessageLog函数结束,创建的MessageLog对象将超出范围,指针将变为NULL,对吗?该问题有什么解决方案?
顺便说一句,我猜我的CreateMessageLog函数不会执行我期望的功能。这个问题也有什么解决方案?谢谢。
最佳答案
使用动态分配:
MessageLog* CreateMessageLog()
{
return new MessageLog;
}
外部记住
delete
函数内new
创建的指针。您将可以在所有需要的时间访问指针所指向的内存。完成后,您必须通过调用
delete a
手动释放内存:例:
MessageLog* a = createMessageLog();
// use `a` the way you want
// when done:
delete a;
如果
MessageLog
对象不是很大,也可以创建一个副本。即使效率较低,您也不必自己管理内存:MessageLog CreateMessageLog()
{
MessageLog a;
return a;
}
PS:确保复制构造函数可用。