Из этот вопрос - добавьте следующие стили в таблицу стилей только для печати. Это решение будет работать в IE и Firefox, но не в Chrome (начиная с версии 21):
#header {
display: table-header-group;
}
#main {
display: table-row-group;
}
#footer {
display: table-footer-group;
}
Я не уверен, чего на самом деле намеревается достичь ОП.
Я бы искал другой дизайн, потому что подход OP кажется мне хрупким и склонным ломаться с наименьшим изменением исходного кода.
Однако, настоящая ошибка OP - ИМХО неправильная инициализация в конструкторе:
Ссылка должна быть взята после инициализации общего указателя. Кроме того, я делаю общий указатель const
, чтобы подчеркнуть, что он сломается (ссылка станет висячей), как только общий указатель будет переназначен. (const
делает такую попытку ошибкой компилятора.)
Взятие ссылки на pointee (независимо от того, указано ли это необработанным или умным указателем) должно быть сделано осторожно с учетом времени жизни pointee. , Ссылка в C ++ не делает этого сама - ndash; это ответственность автора.
Фиксированный пример OP:
#include <memory>
#include <iostream>
struct SomeOtherClass {
int member;
explicit SomeOtherClass(int initArg = 0): member(initArg) { }
void whatever() { std::cout << "SomeOtherClass::member: " << member << '\n'; }
};
class SomeClass {
public:
explicit SomeClass(int argForOther);
SomeClass(const SomeClass&) = delete;
SomeClass& operator=(const SomeClass&) = delete;
void someOtherFunction();
private:
const std::shared_ptr<SomeOtherClass> MemberObject;
SomeOtherClass &MemberObjectReference;
};
SomeClass::SomeClass(int argForOther):
MemberObject(std::make_shared<SomeOtherClass>(argForOther)),
MemberObjectReference(*MemberObject)
{ }
void SomeClass::someOtherFunction()
{
MemberObjectReference.whatever(); // Segmentation fault fixed
}
int main()
{
SomeClass someClass(123);
someClass.someOtherFunction();
return 0;
}
Вывод:
SomeOtherClass::member: 123