是否可以提供两个构造函数:
Object(Obj & obj1, Obj & obj2);
和
Object(int obj1_initval, int obj2_initval);
在第二种情况下,在编译时将obj1和obj2分配给.bss吗?
这将用在裸机系统中,在该系统中我们无法承受堆压。
答案 0 :(得分:1)
构造函数与是否在堆上分配对象无关。您可以使用<tr *ngFor="let template of templates; let j=index ; trackBy:customTrackBy">
<td><b>Template {{j+1}}</b></td>
<td><input class="form-control" [(ngModel)]="templates[j]"/></td>
</tr>
在堆上分配对象,如果不(直接或间接)使用$objPHPExcel
->getActiveSheet()
->getCellByColumnAndRow($col, $row)
->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_STRING);
,则不会在堆上分配对象。
当然,还有其他分配堆内存的方法,例如C中的new
。但是同样的原则适用,C ++不会为您分配堆。
答案 1 :(得分:0)
我假设您正在寻找一个对象,该对象确实引用了包含或不包含为成员的其他对象。
这使我想起std::string_view
与std::string
。
要实现此目的,可以从基类Object
派生内部存储Obj
实例的类ObjectView
,该基类仅引用Obj
的实例(可以存储在任何地方)。
一些例子:
#include <iostream>
#include <string>
class Obj {
private:
std::string _name;
public:
Obj(const std::string &name): _name(name) { }
const std::string& getName() const { return _name; }
};
class ObjectView {
private:
Obj &_obj1, &_obj2;
public:
ObjectView(Obj &obj1, Obj &obj2): _obj1(obj1), _obj2(obj2) { }
Obj& getObj1() { return _obj1; }
Obj& getObj2() { return _obj2; }
};
class Object: public ObjectView {
private:
Obj _obj1, _obj2;
public:
Object(const std::string &name1, const std::string &name2):
ObjectView(_obj1, _obj2),
_obj1(name1), _obj2(name2)
{ }
};
void print(const char *name, ObjectView &objView)
{
std::cout << "ObjectView " << name << " { "
<< "obj1: " << objView.getObj1().getName() << ", "
<< "obj2: " << objView.getObj2().getName() << " }\n";
}
int main()
{
Object object1("o11", "o12");
print("object1", object1);
Obj obj1("o21"), obj2("o22");
ObjectView object2(obj1, obj2);
print("object2", object2);
// done
return 0;
}
输出:
ObjectView object1 { obj1: o11, obj2: o12 }
ObjectView object2 { obj1: o21, obj2: o22 }