코드 조각에 개체 조각을 사용하고 싶은 경우가 있지만 안전하거나 똑똑한 지 결정하려고합니다. #include <iostream>
using namespace std;
class Dog{
public:
Dog(int x)
:x{x}
{
};
int x;
};
class S
Object slicing의 흥미로운 사례가 발생합니다. 나는 싱글 톤을 필요로하는 프로젝트에서 일하고있다. 그래서 Base와 파생 클래스는 모두 싱글 톤이다. 다음 샘플 사례는 내 상황을 설명합니다. 이 내 기본 클래스입니다 // Base.h
class Base
{
public:
static Base& base;
vi
오브젝트를 복사하고 싶지만 슬라이스하지 않으려는 문제점이 있습니다. DerivedObj derivedObj;
myFunc(derivedObj);
void myFunc(MyObj &obj)
{
MyObj *saveForLater = new MyObj(obj); // slices my object
// ... //
}
이 문제를
개체 분리가 개인 상속에서 발생하지 않는 이유는 무엇입니까? 이러한 경우 Static_cast에서 오류가 발생합니까? 개인 상속이 상속 클래스 사이의 "is - a"관계를 유지하지 않는다는 것을 알고 있습니다. 이것은 파생 된 타입베이스가 아니기 때문에 슬라이서와 관련이 있습니다. 그래서 컴파일러는 암시 적 변환을하지 않습니다.
Foo 객체 유형의 벡터를 복사하려고하지만 객체가 Foo의 여러 파생 유형이 될 수 있습니다. 슬라이싱없이 복사하는 방법을 알아낼 수 없습니다. 이 FooDerivedB 수 있기 때문에 auto f = std::unique_ptr<Foo>(new FooDerivedA(*foo));
: 여기 유형이 같은 FooDerivedA해야한다고 지정할 수 없습니다
this을 사용하는 데 어려움이 있습니다. 파생 클래스를 조각화 한 것 같습니다. 이 예제는 내 문제를 설명하는 데 도움이 될 것입니다. class A
{
A() {
OtherClass(*this);
}
virtual doSomething() = 0;
}
class B : public A
{
B()
이 작업이 가능하거나 슬라이스가 발생합니다 (예 : 전체 Derived 객체가 아닌 Base 객체가 차지하는 메모리 만 해제 됨) : Base* ptr = new Derived;
delete ptr;
그렇지 않다면 이럴 수 있습니까? delete static_cast<Derived*>(ptr);
나는이 작업을 통해 사용자의 위치를 제공하는 미로를 인쇄해야합니다. 그러나이 위치는 다른 기능에서 생성 된 위치에 따라 달라질 수 있습니다. 제 말은 포지션이 여러 가지 가능성을 가질 수 있다는 것입니다. 'A'로 표기된 사용자의 위치로 문자를 변경하려면 .replace 메소드를 조합하여 슬라이싱을 사용하려고했습니다. 아래 코드를 참조하십시오. 여기서
unique_ptr을 복사하는 것이 의미가 있는지에 관계없이 *이 종류의 클래스를 구현하기 위해 간단하게 std::unique_ptr을 랩핑하고 기지로의 스마트 포인터의 경우 복사가 수행되는 곳에서 정확하게 어려워졌습니다. 상기 저장된 객체는 파생 클래스이다. 복사 생성자의 순진 구현 (data가 std::unique_ptr를 감싸) 모두 인터넷을 통해 찾