我在一个方法中有一个构造函数,我想要随时访问
//ItemEditor.cpp
#include "ItemContainer.h"
void ItemEditor::CreateItem() {
ItemContainer* wornItems = new ItemContainer();
}
在我的驱动程序内部,我调用我的方法createItem();
//driver
int main(){
ItemEditor* createItem = new ItemEditor();
createItem->CreateItem();
}
之后我想访问createItem之外的背包
我该如何实现?
答案 0 :(得分:0)
使item容器成为成员变量,因此其范围是对象的生命周期。
没有理由使用动态分配,所以只需使用ItemContainer的实例而不是指针。
#include <iostream>
class ItemContainer {
int item = 0;
public:
void addItem(int i) {
item = i;
}
int getItem() {
return item;
}
};
class ItemEditor {
public:
ItemEditor() {
}
void createEditor() {
wornItems.addItem(3);
}
ItemContainer wornItems;
};
int main() {
ItemEditor editor;
int item = editor.wornItems.getItem(); //or some method
std::cout << item << std::endl;
editor.createEditor();
item = editor.wornItems.getItem(); //or some method
std::cout << item;
return 0;
}
您还可以将容器设为私有,并使用公共方法访问其内容。您可以看到示例here
答案 1 :(得分:0)
通过背包我假设
返回的内容 createItem->CreateItem();
为什么不将它存储在指针中,因为你使用new来在堆中分配对象?
ItemContainer* ItemEditor::CreateItem() {
return new ItemContainer();
}
主档案:
int main(){
ItemEditor* createItem = new ItemEditor();
ItemContainer* backpack = createItem->CreateItem();
}
此外,我想建议为ItemContainer提供移动语义并摆脱指针是一种更好的做法。这样你依靠RAII和堆栈来破坏对象,减少内存泄漏的风险。相关文章: http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html
这是一个完整的编译代码:
//Header.h
#include <iostream>
class ItemContainer{
public:
void sayHello(){
std::cout << "HulloWorld!\n";
}
};
class ItemEditor{
public:
ItemEditor(){};
ItemContainer* ItemEditor::CreateItem(){
return new ItemContainer();
}
};
MainFile:
//main
#include "Header.h"
int main()
{
ItemEditor* createItem = new ItemEditor();
ItemContainer* backpack = createItem->CreateItem();
backpack->sayHello();
}