使用 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:确保复制构造函数可用。
关于c++ - 如何成功创建一个创建对象并返回指向该对象的指针的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15451340/